下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、反射與C嫁現(xiàn)【摘要】該文對反射較為深入的分析,介紹了反射的用途和特點,并著重介紹了反射的性能優(yōu)化方法?!娟P(guān)鍵詞】反射;C#;軟件中圖分類號:TP39文獻標識碼A文章編號1006-0278(2015)11-127-01當你做一個軟件可以安裝插件的功能,你連插件的類型名稱都不知道,你怎么實例化這個對象呢?因為程序是支持插件的(第三方的),在開發(fā)的時候并不知道。所以,無法在代碼中New出來,但反射可以,通過反射,動態(tài)加載程序集,然后讀出類,檢查標記之后再實例化對象,就可以獲得正確的類實例。反射的目的就是為了擴展未知的應(yīng)用。比如你寫了一個程序,這個程序定義了一些接口,只要實現(xiàn)了這些接口的dll都可以作
2、為插件來插入到這個程序中。那么怎么實現(xiàn)呢?就可以通過反射來實現(xiàn)。就是把dll加載進內(nèi)存,然后通過反射的方式來調(diào)用dll中的方法。反射Reflection,MFC時代叫RTTI(RuntimeTypeIdentification)運行時類型識別,提供一種動態(tài)創(chuàng)建對象的能力。反射(Reflection)是.NET中的重要機制,通過反射,可以在運行時獲得.NET中每一個類型(包括類、結(jié)構(gòu)、委托、接口和枚舉等)的成員,包括方法、屬性、事件,以及構(gòu)造函數(shù)等。還可以獲得每個成員的名稱、限定符和參數(shù)等。有了反射,即可對每一個類型了如指掌。如果獲得了構(gòu)造函數(shù)的信息,即可直接創(chuàng)建對象,即使這個對象的類型在編譯時
3、還不知道。程序代碼在編譯后生成可執(zhí)行的應(yīng)用,我們首先要了解這種可執(zhí)行應(yīng)用程序的結(jié)構(gòu)。應(yīng)用程序結(jié)構(gòu)分為應(yīng)用程序域一程序集一模塊一類型一成員幾個層次,公共語言運行庫加載器管理應(yīng)用程序域,這種管理包括將每個程序集加載到相應(yīng)的應(yīng)用程序域以及控制每個程序集中類型層次結(jié)構(gòu)的內(nèi)存布局。程序集包含模塊,而模塊包含類型,類型又包含成員,反射則提供了封裝程序集、模塊和類型的對象。我們可以使用反射動態(tài)地創(chuàng)建類型的實例,將類型綁定到現(xiàn)有對象或從現(xiàn)有對象中獲取類型,然后調(diào)用類型的方法或訪問其字段和屬性??梢允褂肅onstructorInfo了解構(gòu)造函數(shù)的名稱、參數(shù)、訪問修飾符(如pulic或private)和實現(xiàn)詳細信
4、息(如abstract或virtual)等。使用Type的GetConstructors或GetConstructor方法來調(diào)用特定的構(gòu)造函數(shù)。System.Reflection.Emit命名空間的類提供了一種特殊形式的反射,可以在運行時構(gòu)造類型。反射也可用于創(chuàng)建稱為類型瀏覽器的應(yīng)用程序,使用戶能夠選擇類型,然后查看有關(guān)選定類型的信息。在設(shè)計模式實現(xiàn)中常使用反射技術(shù),如采用反射技術(shù)可以簡化工廠的實現(xiàn)。;通過反射可以將需要實現(xiàn)的子類名稱傳遞給工廠方法,這樣無須在子類中實現(xiàn)類的實例化;使用反射可以減少抽象工廠的子類;采用反射技術(shù)可以簡化工廠代碼的復(fù)雜程度,在.NET項目中,采用反射技術(shù)的工廠已經(jīng)基
5、本代替了工廠方法;采用反射技術(shù)可以極大地簡化對象的生成,對以下設(shè)計模式的實現(xiàn)也有很大影響。反射的層次間都是一對多的關(guān)系。使用反射可以使用反射動態(tài)地創(chuàng)建類型的實例,將類型綁定到現(xiàn)有對象,或從現(xiàn)有對象中獲取類型;應(yīng)用程序需要在運行時從某個特定的程序集中載入一個特定的類型,以便實現(xiàn)某個任務(wù)時可以用到反射;反射主要應(yīng)用與類庫,這些類庫需要知道一個類型的定義,以便提供更多的功能。調(diào)用AppDomain對象的GetAssemblies方法將返回一個由System.Reflection.Assembly元素組成的數(shù)組。顯示的調(diào)用一個程序集,system.reflecton.assembly類型提供了下面三種
6、方法:1 .Load方法:極力推薦的一種方法,Load方法帶有一個程序集標志并載入它,Load將引起CLR把策略應(yīng)用到程序集上,先后在全局程序集緩沖區(qū),應(yīng)用程序基目錄和私有路徑下面查找該程序集,如果找不到該程序集系統(tǒng)拋出異常。2 .LoadFrom方法:傳遞一個程序集文件的路徑名(包括擴展名),CLR會載入您指定的這個程序集,傳遞的這個參數(shù)不能包含任何關(guān)于版本號的信息,區(qū)域性,和公鑰信息,如果在指定路徑找不到程序集拋出異常。3 .LoadWithPartialName:永遠不要使用這個方法,因為應(yīng)用程序不能確定再在載入的程序集的版本。該方法的唯一用途是幫助那些在.Net框架的測試環(huán)節(jié)使用.ne
7、t框架提供的某種行為的客戶,這個方法將最終被拋棄不用。如果你想要獲得一個類型繼承的所有接口集合,可以調(diào)用Type的FindInterfacesGetInterface或者GetInterfaces。所有這些方法只能返回該類型直接繼承的接口,他們不會返回從一個接口繼承下來的接口。要想返回接口的基礎(chǔ)接口必須再次調(diào)用上述方法。使用反射來調(diào)用類型或者觸發(fā)方法,或者訪問一個字段或者屬性時clr需要做更多的工作:校驗參數(shù),檢查權(quán)限等等,所以速度是非常慢的。所以盡量不要使用反射進行編程,對于打算編寫一個動態(tài)構(gòu)造類型(晚綁定)的應(yīng)用程序,可以采取以下的幾種方式進行代替:1 .通過類的繼承關(guān)系。讓該類型從一個編譯時可知的基礎(chǔ)類型派生出來,在運行時生成該類型的一個實例,將對其的引用放到其基礎(chǔ)類型的一個變量中,然后調(diào)用該基礎(chǔ)類型的虛方法。2 .通過接口實現(xiàn)。在運行時,構(gòu)建該類型的一個實例,將對其的引用放到其接口類型的一個變量中,然后調(diào)用該接口定義的虛方法。3 .通過委托實現(xiàn)。讓該類型實現(xiàn)一個方法,其名稱和原型都與一個在編譯時就已知的委托相符。在運行時先構(gòu)造該類型的實例,然后在用該方法的對象及名稱構(gòu)造出該委托的實例,接著通過委托調(diào)用你想要的方法
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年高校與企業(yè)合作協(xié)議教授聘請合同范本3篇
- 2025版木門企業(yè)安全生產(chǎn)責(zé)任書合同范本2篇
- 2025年分期付款運動服裝合同
- 2025年分期室內(nèi)設(shè)計服務(wù)合同
- 跨國集團2025年度全球營銷戰(zhàn)略合同2篇
- 2025年版?zhèn)€人汽車買賣合同示范文本3篇
- 2025年汽車配件贈與協(xié)議
- 二零二五年敬老院養(yǎng)老用品銷售與售后服務(wù)合同規(guī)范3篇
- 2025版教育培訓(xùn)機構(gòu)合作協(xié)議樣本3篇
- 2025版學(xué)生實訓(xùn)基地實習(xí)就業(yè)保障服務(wù)合同3篇
- 《社會工作實務(wù)》全冊配套完整課件3
- 單位違反會風(fēng)會書檢討書
- 2024年4月自考00832英語詞匯學(xué)試題
- 《電力用直流電源系統(tǒng)蓄電池組遠程充放電技術(shù)規(guī)范》
- 《哪吒之魔童降世》中的哪吒形象分析
- 信息化運維服務(wù)信息化運維方案
- 汽車修理廠員工守則
- 公安交通管理行政處罰決定書式樣
- 10.《運動技能學(xué)習(xí)與控制》李強
- 冀教版數(shù)學(xué)七年級下冊綜合訓(xùn)練100題含答案
- 1神經(jīng)外科分級護理制度
評論
0/150
提交評論