程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> Type.GetType()在跨程序集反射時返回null的解決方法

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

編輯:C#入門知識

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

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

 

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

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

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

 

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

1 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只會在當前程序集中進行類型搜索!

    

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved