C#- 反射之 GetType()方法


Type.GetType()在跨程序集反射時返回null的解決方法

在開發中,經常會遇到這種情況,在程序集A.dll中需要反射程序集B.dll中的類型。如果使用稍有不慎,就會產生運行時錯誤。例如使用Type.GetType("BNameSpace.ClassName")在程序集A.dll獲取程序集B.dll中的類型,就會返回Null。

關於跨程序集的反射,有兩點需要注意:

 

1、如果使用typeof,編譯能通過,則跨程序集的反射一定可以正常運行。可以說,typeof是支持強類型的。比如

Type supType = typeof(BNameSpace.SubSpace.Class);

如果當前程序集沒有添加對EnterpriseServerBase.dll的引用,則編譯會報錯。

 

2、如果使用Type.GetType來進行反射的話,情況就復雜些。這是因為Type.GetType是非強類型的。Type.GetType的參數是一個string為類型的完全限定名,如果當string表示的目標類型不在當前程序集中,則運行時Type.GetType會返回null。解決的辦法是:首先加載目標程序集,然后再使用Assembly.GetType方法來獲取類型。如

Assembly asmb = Assembly.LoadFrom("EnterpriseServerBase.dll" ) ;
2
  Type supType = asmb.GetType("EnterpriseServerBase.DataAccess.IDBAccesser") ;

 

注意,當使用Type.GetType的時候,即使你添加了對EnterpriseServerBase.dll的引用,Type.GetType("EnterpriseServerBase.DataAccess.IDBAccesser")也會返回null,這是因為Type.GetType只會在當前程序集中進行類型搜索!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM