一、什么是反射
反射Reflection:System.Reflection,是.Net Framework提供的一个帮助类库,可以读取并使用metadata。
反射是无处不在的,MVC-Asp.Net-ORM-IOC-AOP 几乎所有的框架都离不开反射
如下图是程序执行的过程,高级语言经过编译器编译得到dll/exe文件,这里的文件可以跨平台使用,编译后的文件中其实包括了metadata元数据(数据清单,描述了DLL/exe里面的各种信息)和IL(也是一种面向对象语言,但是不太好阅读)在经过CLR/JIT编译得到可以被计算机所执行的机器码。
C# 反射Reflection——反射反射程序员的快乐
二、反射的使用
一)反射动态加载程序集
            Assembly assembly1 = Assembly.LoadFrom(@"DB.MySql.dll");//当前路径
            Assembly assembly2 = Assembly.LoadFile(@"D:\ruanmou\MyReflection\bin\Debug\DB.MySql.dll");//dll、exe文件完整路径
            Assembly assembly3 = Assembly.Load(@"DB.MySql");//dll、exe名称   dll/exe需要拷贝至程序bin文件夹下
View Code

二)简单工厂生产对应实体

        /// <summary>
        /// 简单工厂生产对应实体
        /// </summary>
        /// <returns></returns>
        public static T CreateInstance<T>()
        {
            Assembly assembly = Assembly.Load(ConfigurationManager.AppSettings["DalDllName"]);//加载dll
            Type dalType = assembly.GetType(ConfigurationManager.AppSettings["DalTypeName"]);//获取类型
            return (T)Activator.CreateInstance(dalType);//创建对象
            //var newType = dalType.MakeGenericType(typeof(T));//获取泛型类型
            //return (T)Activator.CreateInstance(newType);创建泛型类型对象
        }
View Code

相关文章: