天天看點

動态加載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)反射功能十分強大,沒有什麼不能實作的。若實作“跨程式集”,請使用第一種方法建立類的執行個體,并反射該執行個體的字段、屬性、方法、事件... 然後動态調用之。

繼續閱讀