C#高階–反射詳解

逝水ru梦發表於2024-04-09

一、反射是什麼
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");
**3、建立物件** 直接傳型別 過載方法,傳dll的全名稱 返回值是object型別,不能直接呼叫方法

相關文章