一、什么是反射
反射Reflection:System.Reflection,是.Net Framework提供的一个帮助类库,可以读取并使用metadata。
反射是无处不在的,MVC-Asp.Net-ORM-IOC-AOP 几乎所有的框架都离不开反射
如下图是程序执行的过程,高级语言经过编译器编译得到dll/exe文件,这里的文件可以跨平台使用,编译后的文件中其实包括了metadata元数据(数据清单,描述了DLL/exe里面的各种信息)和IL(也是一种面向对象语言,但是不太好阅读)在经过CLR/JIT编译得到可以被计算机所执行的机器码。
二、反射的使用
一)反射动态加载程序集
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文件夹下
二)简单工厂生产对应实体
/// <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);创建泛型类型对象 }