一、反射是什麼
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");