C#反射中Assembly.Load及Assembly.Load.CreateInstance方法介紹
最近研究設計模式,在學習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("程式集實際路徑")
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-442007/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Lombok介紹及使用方法Lombok
- Lombok介紹,使用方法及原理Lombok
- Ldd命令介紹及使用方法
- tcpdump抓包及tshark解包方法介紹TCP
- 常見的反爬蟲措施與應對方法介紹爬蟲
- C#中Load等常見方法的介紹C#
- 前端跨域有哪些種方法及介紹?前端跨域
- ArrayList相關方法介紹及原始碼分析原始碼
- Cookie介紹及JavaScript操作Cookie方法詳解CookieJavaScript
- 簡單介紹C#呼叫USB攝像頭的方法C#
- C#實現多語言介面程式的方法介紹C#
- 三大主流前端框架介紹及選型方法前端框架
- GoldenGate Integrated Capture Mode介紹及配置方法GoAPT
- Mock方法介紹Mock
- C#各類集合介紹C#
- Apache IoTDB C# SDK 介紹ApacheC#
- C#容器類,效能介紹C#
- Regex 類介紹 (C#)C#
- 簡單介紹四種Python 列表反轉顯示的方法Python
- vagrant介紹及使用
- 金融反欺詐-交易基礎介紹
- linux 檔案屬性介紹及改變方法Linux
- PHP魔術方法和魔術常量介紹及使用PHP
- css中em與px的介紹及換算方法CSS
- getElementsByClassName()方法用法介紹
- 輪換代理介紹及適用場景介紹
- C#中常用I/O流介紹、 FileStream類及FileMode、FileAccess、FileShareC#
- Docker基本介紹及使用Docker
- 環境搭建及介紹
- 安裝apache及介紹Apache
- Gin框架介紹及使用框架
- Sqlite 介紹及應用SQLite
- 設計模式和反模式簡單介紹設計模式
- 常見的Web安全漏洞及測試方法介紹Web
- 百度網頁搜尋投訴反饋的使用方法介紹網頁
- jQuery css()方法用法介紹jQueryCSS
- Number.isNaN()方法介紹NaN
- IPTABLES 配置方法介紹(轉)