一、反射是什么
1、C#编译运行过程
高级语言->编译->dll/exe文件->CLR/JIT->机器码
2、原理解析
metadata:元数据数据清单,记录了dll中包含了哪些东西,是一个描述。
IL:中间语言,编译把高级语言编译后得到的C#中最真实的语言状态,面向对象语言。
反射:来自于System.Reflection,是一个帮助类库,可以读取dll/exe中metadata,使用metadata创建对象。
Emit:一种反射技术,可以动态创建dll/exe。
反编译工具:ILSpy可以反编译dll/exe,查看对应的C#/IL代码。
二、反射创建对象
1、动态读取dll
LoadFrom:dll全名称,需要后缀
LoadFile:全路径,需要dll后缀
Load:dll名称不需要后缀
//1、动态读取dll的三种方式 //(1)LoadFrom:dll全名称,需要后缀 Assembly assembly = Assembly.LoadFrom("Business.DB.SqlServer.dll"); //(2)LoadFile:全路径,需要dll后缀 //Assembly assembly1 = Assembly.LoadFile(@"dll文件全路径"); //(3)Load:dll名称 不需要后缀 //Assembly assembly2 = Assembly.Load("Business.DB.SqlServer");
2、获取类型
点击查看代码
//2、获取某一个具体的类型,参数需要是类的全名称
Type type1 = assembly.GetType("Business.DB.SqlServer.SqlServerHelper");