C#反射的简单示例

反射(Reflection)可以在运行时获 得.NET中每一个类型(包括类、结构、委托、接口和枚举等)的成员,包括方法、属性、事件,以及构造函数等。还可以获得每个成员的名称、限定符和参数等反正说白了就是通过反射能够获取一个未知类的类型。下面通过代码来讲解

1:反射的基本用法

复制代码
public class ReflectionTest {
        
        /// <summary>
        /// 反射名称
        /// </summary>
        public string ReflectionName { get; set; }

        public string GetName()
        {
            return "张三";
        }
    }
复制代码
           Type type = typeof(ReflectionTest);
            string name = type.Name;//获取当前成员的名称
            string fullName = type.FullName;//获取类的全部名称不包括程序集
            string nameSpace = type.Namespace;//获取该类的命名空间
            var assembly = type.Assembly;//获取该类的程序集名
            var module = type.Module;//获取该类型的模块名            
            var memberInfos = type.GetMembers();//得到所有公共成员

 在控制台打印结果如下图:

 

复制代码
           //获取当前执行代码的程序集
            Assembly assem = Assembly.GetExecutingAssembly();
            Console.WriteLine(assem.FullName);

            var types = assem.GetTypes();//程序集下所有的类
            Console.WriteLine("程序集包含的类型:");
            foreach (var item in types) {
                Console.WriteLine("" + item.Name);
            }
复制代码

打印结果

 2:通过反射建立工厂

 

复制代码
public static T Instance<T>(string assembly, string type)
        {
            if (string.IsNullOrEmpty(type)) throw new ArgumentException("type:参数不能为空!");

            //1、获取有效的程序集
            Assembly mAssembly = string.IsNullOrEmpty(assembly) ? Assembly.GetCallingAssembly() : Assembly.Load(assembly);
            var t = (T) mAssembly.CreateInstance(type); 
            return t;
        }
复制代码
  • 参数assembly 指的是程序dll的路径如果本地传空
  • 参数type 指的是指定类的路径

调用:var assembly = Instance<DogInfo>("", "AenericApp.Entity.DogInfo");即可

当然orm也是运用很多反射大家自己可以学习以上就是一个简单介绍

posted @   朝向远方  阅读(8185)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示