1. 程式人生 > >動態載入Dll時,通過Type生成類物件

動態載入Dll時,通過Type生成類物件

原文: 動態載入Dll時,通過Type生成類物件

轉: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)反射功能十分強大,沒有什麼不能實現的。若實現“跨程式集”,請使用第一種方法建立類的例項,並反射該例項的欄位、屬性、方法、事件... 然後動態呼叫之。