動態載入Dll時,通過Type生成類物件
阿新 • • 發佈:2018-11-07
原文:
動態載入Dll時,通過Type生成類物件
=======================================================
補充:
1)反射建立某個類的例項時,必須保證使用類的完全限定名(名稱空間 + 類名)。Type.GetType 方法返回 null 則意味搜尋元資料中的相關資訊失敗(反射失敗),請確保反射時使用類的完全限定名。
2)反射功能十分強大,沒有什麼不能實現的。若實現“跨程式集”,請使用第一種方法建立類的例項,並反射該例項的欄位、屬性、方法、事件... 然後動態呼叫之。
轉:http://www.cnblogs.com/zfanlong1314/p/4197383.html
“反射”其實就是利用程式集的元資料資訊。 反射可以有很多方法,編寫程式時請先匯入 System.Reflection 名稱空間。
1、假設你要反射一個 DLL 中的類,並且沒有引用它(即未知的型別):
Assembly assembly = Assembly.LoadFile("程式集路徑,不能是相對路徑"); // 載入程式集(EXE 或 DLL) object obj = assembly.CreateInstance("類的完全限定名(即包括名稱空間)"); // 建立類的例項
2、若要反射當前專案中的類(即當前專案已經引用它了)可以為:
Assembly assembly = Assembly.GetExecutingAssembly(); // 獲取當前程式集
object obj = assembly.CreateInstance("類的完全限定名(即包括名稱空間)"); // 建立類的例項,返回為 object 型別,需要強制型別轉換
3、也可以為:
Type type = Type.GetType("類的完全限定名"); object obj = type.Assembly.CreateInstance(type);
=======================================================
補充:
1)反射建立某個類的例項時,必須保證使用類的完全限定名(名稱空間 + 類名)。Type.GetType 方法返回 null 則意味搜尋元資料中的相關資訊失敗(反射失敗),請確保反射時使用類的完全限定名。
2)反射功能十分強大,沒有什麼不能實現的。若實現“跨程式集”,請使用第一種方法建立類的例項,並反射該例項的欄位、屬性、方法、事件... 然後動態呼叫之。