C#反射中Assembly.Load及Assembly.Load.CreateInstance方法介紹

來源:互聯網
上載者:User

最近研究設計模式,在學習Terrylee老師的AbstractFactory的時候用到了反射,順便也研究了一下C#的反射機制。收集了網上的一些資料和我個人的理解,供大家學習
      在C#中,我們要使用反射,首先要搞清楚以下命名空間中幾個類的關係: 
 System.Reflection命名空間
(1)  AppDomain:應用程式定義域,可以將其理解為一組程式集的邏輯容器
(2)  Assembly:程式集類
(3)  Module:模組類
(4)  Type:使用反射得到類型資訊的最核心的類
他們之間是一種從屬關係,也就是說,一個AppDomain可以包含N個Assembly,一個Assembly可以包含N個Module,而一個Module可以包含N個Type. AppDomain這個類我們等下再來講解。我們先關注Assembly個類,在程式中,如果我們要動態載入一個程式集怎麼辦呢?有幾種方式可以使用,分別是Load,LoadFrom和LoadWithPartialName三個Assembly的靜態方法.
       先來講解Assembly.Load方法,該方法會有多個重載版本,其中一個就是提供者集的詳細資料,即程式集的標識,包括程式集的名稱,版本,地區資訊,公有密鑰標記,全部都是以一個字串的形式提供,例如:"MyAssembly,Version=1.0.0.0,culture=zh-CN,PublicKeyToken=47887f89771bc57f”.
             那麼,使用Assembly.Load載入程式集的順序是怎樣的呢?首先它會去全域組件快取尋找,然後到應用程式的根目錄尋找,最後會到應用程式的私人路徑尋找。
             當然,如果你使用的是弱命名程式集,也即只給出程式集的名稱,那麼這個時候,CLR將不會在程式集上應用任何安全或者部署策略,而且Load也不會到全域緩衝程式集中尋找程式集。
Assembly.Load("")的使用說明如下;  
  並不是命名空間。常用的是程式集名稱,也就是dll的名稱  
    重載列表    
  名稱     說明      
  Assembly.Load   (AssemblyName)     在給定程式集的   AssemblyName   的情況下,載入程式集。    
  由   .NET   Compact   Framework   支援。     
  Assembly.Load   (Byte[])     載入帶有基於通用物件檔案格式   (COFF)   的映像的程式集,該映像包含已發出的程式集。將該程式集載入到調用方的域。      
  Assembly.Load   (String)     通過給定程式集的長格式名稱載入程式集。 
  由   .NET   Compact   Framework   支援。     
  Assembly.Load   (AssemblyName,   Evidence)     在給定程式集的   AssemblyName   的情況下,載入程式集。使用提供的證據將該程式集載入到調用方的域中。      
  Assembly.Load   (Byte[],   Byte[])     載入帶有基於通用物件檔案格式   (COFF)   的映像的程式集,該映像包含已發出的程式集。      
  Assembly.Load   (String,   Evidence)     通過給定的程式集的顯示名稱來載入程式集,使用提供的證據將程式集載入到調用方的域中。
  Assembly.Load   (Byte[],   Byte[],   Evidence)     載入帶有基於通用物件檔案格式   (COFF)   的映像的程式集,該映像包含已發出的程式集。

關於反射Assembly.Load("程式集").CreateInstance("命名空間.類")
而不管在哪一層寫這段代碼其中的("程式集")讀取的實際是web層bin檔案夾下的dll,也就是說你反射的類的程式集dll在web層的bin下必須有
注意CreateInstance()一定是命名空間.類名,否則建立的執行個體為空白
Assembly.Load("程式集名")
Assembly.LoadFrom("程式集實際路徑")

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.