反射


【资料图】

反射

反射反射程序员的快乐,反射是无处不在的,封装框架,系统开发,MVC,IOC,ORM都离不开反射。

一、反射/反编译工具/高级语言到计算机语言的历程

  1. 高级语言---编译---dll/exe文件
  2. metadata:元数据清单---记录了dll中包含哪些东西,是一个描述。
  3. IL:中间语言---编译把高级语言编译后得到c#中最真实的言语状态,面向对象语言。
  4. 反编译工具:逆向工程;ILSPY --- DLL/EXE、 --- 反编译回来,c#/IL
  5. 反射: 来自于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();

关键词:

上一篇:偷渡阴平 世界热文
下一篇:最后一页
热门推荐