下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、反射與C#實(shí)現(xiàn)當(dāng)你做一個軟件可以安裝插件的功能, 你連插件的類型名稱 都不知道,你怎么實(shí)例化這個對象呢?因?yàn)槌绦蚴侵С植寮?(第三方的),在開發(fā)的時候并不知道。所以,無法在代碼中 New出來,但反射可以,通過反射,動態(tài)加載程序集,然后讀出 類,檢查標(biāo)記之后再實(shí)例化對象,就可以獲得正確的類實(shí)例。反 射的目的就是為了擴(kuò)展未知的應(yīng)用。 比如你寫了一個程序, 這個 程序定義了一些接口, 只要實(shí)現(xiàn)了這些接口的 dll 都可以作為插 件來插入到這個程序中。 那么怎么實(shí)現(xiàn)呢?就可以通過反射來實(shí) 現(xiàn)。就是把 dll 加載進(jìn)內(nèi)存, 然后通過反射的方式來調(diào)用 dll 中 的方法。反射 Reflection ,
2、MFC寸代叫 RTTI (Run time Type Identification )運(yùn)行時類型識別, 提供一種動態(tài)創(chuàng)建對象的能 力。反射( Reflection )是中的重要機(jī)制,通過反射,可以在運(yùn) 行寸獲得中每一個類型(包括類、結(jié)構(gòu)、委托、接口和枚舉等) 的成員,包括方法、屬性、事件,以及構(gòu)造函數(shù)等。還可以獲得 每個成員的名稱、限定符和參數(shù)等。有了反射,即可對每一個類 型了如指掌。如果獲得了構(gòu)造函數(shù)的信息,即可直接創(chuàng)建對象, 即使這個對象的類型在編譯寸還不知道。程序代碼在編譯后生成可執(zhí)行的應(yīng)用, 我們首先要了解這種 可執(zhí)行應(yīng)用程序的結(jié)構(gòu)。應(yīng)用程序結(jié)構(gòu)分為應(yīng)用程序域一程序 集模塊類型成員幾個
3、層次, 公共語言運(yùn)行庫加載器管理應(yīng) 用程序域,這種管理包括將每個程序集加載到相應(yīng)的應(yīng)用程序域 以及控制每個程序集中類型層次結(jié)構(gòu)的內(nèi)存布局。在設(shè)計模式實(shí)現(xiàn)中常使用反射技術(shù), 如采用反射技術(shù)可以簡 化工廠的實(shí)現(xiàn)。 ;通過反射可以將需要實(shí)現(xiàn)的子類名稱傳遞給工 廠方法, 這樣無須在子類中實(shí)現(xiàn)類的實(shí)例化; 使用反射可以減少 抽象工廠的子類;采用反射技術(shù)可以簡化工廠代碼的復(fù)雜程度, 在項目中, 采用反射技術(shù)的工廠已經(jīng)基本代替了工廠方法; 采用 反射技術(shù)可以極大地簡化對象的生成, 對以下設(shè)計模式的實(shí)現(xiàn)也 有很大影響。反射的層次間都是一對多的關(guān)系。 使用反射可以使用反射動 態(tài)地創(chuàng)建類型的實(shí)例, 將類型綁定到現(xiàn)
4、有對象, 或從現(xiàn)有對象中 獲取類型;應(yīng)用程序需要在運(yùn)行時從某個特定的程序集中載入一 個特定的類型, 以便實(shí)現(xiàn)某個任務(wù)時可以用到反射; 反射主要應(yīng) 用與類庫, 這些類庫需要知道一個類型的定義, 以便提供更多的 功能。調(diào)用AppDomain對象的GetAssemblies方法將返回一個由 System.Reflection.Assembly 元素組成的數(shù)組。顯示的調(diào)用一個程序集, system.reflecton.assembly 類型 提供了下面三種方法:1.Load 方法:極力推薦的一種方法, Load 方法帶有一個程 序集標(biāo)志并載入它,Load將引起CLR把策略應(yīng)用到程序集上, 先后在全局程
5、序集緩沖區(qū), 應(yīng)用程序基目錄和私有路徑下面查找 該程序集,如果找不到該程序集系統(tǒng)拋出異常。2.LoadFrom 方法:傳遞一個程序集文件的路徑名(包括擴(kuò) 展名),CLR會載入您指定的這個程序集,傳遞的這個參數(shù)不能 包含任何關(guān)于版本號的信息,區(qū)域性,和公鑰信息,如果在指定 路徑找不到程序集拋出異常。3.LoadWithPartialName :永遠(yuǎn)不要使用這個方法,因?yàn)閼?yīng) 用程序不能確定再在載入的程序集的版本。 該方法的唯一用途是 幫助那些在框架的測試環(huán)節(jié)使用框架提供的某種行為的客戶, 這 個方法將最終被拋棄不用。如果你想要獲得一個類型繼承的所有接口集合,可以調(diào)用 Type 的 FindInte
6、rfaces GetInterface 或者 GetInterfaces 。所 有這些方法只能返回該類型直接繼承的接口, 他們不會返回從一 個接口繼承下來的接口。 要想返回接口的基礎(chǔ)接口必須再次調(diào)用 上述方法。使用反射來調(diào)用類型或者觸發(fā)方法, 或者訪問一個字段或者 屬性時 clr 需要做更多的工作:校驗(yàn)參數(shù),檢查權(quán)限等等,所以 速度是非常慢的。 所以盡量不要使用反射進(jìn)行編程, 對于打算編 寫一個動態(tài)構(gòu)造類型(晚綁定)的應(yīng)用程序,可以采取以下的幾 種方式進(jìn)行代替:1. 通過類的繼承關(guān)系。 讓該類型從一個編譯時可知的基礎(chǔ)類 型派生出來, 在運(yùn)行時生成該類型的一個實(shí)例, 將對其的引用放 到其基礎(chǔ)類型的一個變量中,然后調(diào)用該基礎(chǔ)類型的虛方法。2. 通過接口實(shí)現(xiàn)。在運(yùn)行時,構(gòu)建該類型的一個實(shí)例,將對 其的引用放到其接口類型的一個變量中, 然后調(diào)用該接口定義的 虛方法。3. 通過委托實(shí)現(xiàn)。 讓該類型實(shí)現(xiàn)一個方法, 其名稱和原型都 與一個在
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- PB-22-N-5-Hydroxypentyl-3-carboxyindole-metabolite-生命科學(xué)試劑-MCE-1773
- L-Glutamic-acid-ammonium-生命科學(xué)試劑-MCE-7975
- 1-Octadecyl-lysophosphatidic-acid-PA-O-18-0-0-0-生命科學(xué)試劑-MCE-8369
- 2025年度績效合同簽訂與履行指南
- 二零二五年度未簽合同員工勞動仲裁應(yīng)對措施及賠償協(xié)議
- 二零二五年度物業(yè)與業(yè)主之間綠化賠償合作協(xié)議
- 2025年度煙酒店員工培訓(xùn)與職業(yè)發(fā)展合同
- 柴油發(fā)電機(jī)組技術(shù)協(xié)議
- 施工日志填寫樣本防雷工程施工
- 小學(xué)語文人教一年級上冊識字2《日月明》教學(xué)設(shè)計
- 充電樁知識培訓(xùn)課件
- 2025年七年級下冊道德與法治主要知識點(diǎn)
- 2025年交通運(yùn)輸部長江口航道管理局招聘4人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 老年髖部骨折患者圍術(shù)期下肢深靜脈血栓基礎(chǔ)預(yù)防專家共識(2024版)解讀
- 廣東省廣州市2025屆高三上學(xué)期12月調(diào)研測試(零模)英語 含解析
- 偏癱足內(nèi)翻的治療
- 藥企質(zhì)量主管競聘
- 信息對抗與認(rèn)知戰(zhàn)研究-洞察分析
- 心腦血管疾病預(yù)防課件
- 手術(shù)室??谱o(hù)士工作總結(jié)匯報
- 2025屆高三聽力技巧指導(dǎo)-預(yù)讀、預(yù)測
評論
0/150
提交評論