【资料图】
反射
反射反射程序员的快乐,反射是无处不在的,封装框架,系统开发,MVC,IOC,ORM都离不开反射。
一、反射/反编译工具/高级语言到计算机语言的历程
- 高级语言---编译---dll/exe文件
- metadata:元数据清单---记录了dll中包含哪些东西,是一个描述。
- IL:中间语言---编译把高级语言编译后得到c#中最真实的言语状态,面向对象语言。
- 反编译工具:逆向工程;ILSPY --- DLL/EXE、 --- 反编译回来,c#/IL
- 反射: 来自于System.Reflection,是一个帮助类库---可以读取DLL/EXE中metadata和使用metadata + 动态的创建dll/exe --- Emit技术
二、反射创建对象
首先定义一个接口
namespace Business.DB.Interface{ /// /// 数据访问类抽象 /// public interface IDBHelper { void Query(); }}
实现了接口的类
namespace Business.DB.SqlServer{ public class SqlServerHelper { //Nuget:System.Data.SqlClient private string ConnectionString = "Data Source=DESKTOP-VUL99EF; Database=CustomerDB; User ID=sa; Password=sa123; MultipleActiveResultSets=True"; private static string GetConnection() { //Nuget引入: //SetBasePath:Microsoft.Extensions.Configuration.FileExtensions //AddJsonFile:Microsoft.Extensions.Configuration.Json var Configuration = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: true) .Build(); return Configuration.GetConnectionString("Default"); } public SqlServerHelper() { Console.WriteLine($"{this.GetType().Name}被构造"); } //public SqlServerHelper(int i) //{ // Console.WriteLine($"{this.GetType().Name}被构造"); //} public void Query() { Console.WriteLine($"{this.GetType().Name}.Query"); } }}
我们开始尝试通过反射创建对象
//传统方式创建对象IDBHelper dbHelper=new SqlServerHelper();
关键词: