永久免费看黄A片无码软件,japanese 在线观看国产,强奷高H猛烈失禁潮喷播放,亚洲成精品自拍

rexian

咨詢電話:023-6276-4481

熱門(mén)文章

聯(lián)系方式

電 話:023-6276-4481

郵箱:broiling@qq.com

地址:重慶市南岸區(qū)亞太商谷6幢25-2

當(dāng)前位置:網(wǎng)站首頁(yè) > 技術(shù)文章 > 網(wǎng)友心得 說(shuō)說(shuō).NET中的反射

網(wǎng)友心得 說(shuō)說(shuō).NET中的反射

編輯:T.T 發(fā)表時(shí)間:2017-11-29 12:46:44
T.T

反射是個(gè)很有趣的東西。而有趣的東西,大都可以展開(kāi)聯(lián)想,可以海闊開(kāi)空。 
  西游記中,孫猴子會(huì)七十二變。反射好像也可以。 
  神筆馬良筆下,萬(wàn)物復(fù)活,呵呵,反射有時(shí)候就是那只筆。 
  第一次接觸Java時(shí),最令我驚訝的是它的反射。 
  第一次接觸.NET時(shí),又見(jiàn)反射。 
  正所謂,一回生,二回熟,不再大驚小怪之后,似乎應(yīng)該仔細(xì)想一想了。
  說(shuō)半天,反射究竟是啥? 
  歪一下頭,閉上眼,仔細(xì)想想,再想想…… 
  反射,運(yùn)行中枚舉程序結(jié)構(gòu),執(zhí)行時(shí)生成的無(wú)需編譯的代碼。 
  我絞盡腦汁,能想到的描述方式,就這樣了?!  ?br/>  沒(méi)明白?餓的神啦! 
  丑陋的老巫婆開(kāi)始念起咒語(yǔ): 
  我要變成一個(gè)美女。我要去參加超級(jí)女聲…… 
  她沒(méi)有去美容院,也沒(méi)有去參加超女,在一面魔鏡的反射下,在偶們面前出現(xiàn)了一個(gè)美女。
  好了,說(shuō)正經(jīng)的。沒(méi)啥條理,按反射的各項(xiàng)功能,我來(lái)說(shuō)說(shuō)可能的,有趣和無(wú)趣的一些應(yīng)用。

一:枚舉程序結(jié)構(gòu)。
  嗯,就是在運(yùn)行的時(shí)候,查出一些代碼級(jí)的東東。
  .NET中,從當(dāng)前應(yīng)用程序域開(kāi)始,通過(guò)反射,可以枚舉出所有程序集(分發(fā)包),然后呢,在程序集中,可以枚舉出所有模塊(DLL或exe級(jí)) ,模塊中,枚舉出所有類型(Class),類型中,枚舉出所有成員(屬性,方法等……),或是接口、嵌套類,在方法((構(gòu)造器,屬性,事件)中,枚舉出中的所有參數(shù)。 
  應(yīng)該沒(méi)頭暈,這很簡(jiǎn)單,最后,一句話,.NET程序的大體框架都可以通過(guò)反射來(lái)得到。 
  說(shuō)說(shuō)用處。

1.1:反編譯IL語(yǔ)言

  是了,你當(dāng)然用過(guò)ILDasm這個(gè).NET的IL語(yǔ)言反編譯工具。
    實(shí)際上,裝載程序后(.NET中可以指定裝載程序集),通過(guò)反射,結(jié)合公開(kāi)的托管模塊和程序集的格式進(jìn)行方法的IL代碼分析,你可以完成定制你自已的反編譯工具。當(dāng)然,是否有意義,或許只是寫(xiě)出來(lái)炫一炫,或是加深某此方面知識(shí)的理解。

1.2:設(shè)計(jì)器(或其它場(chǎng)景),動(dòng)態(tài)提供類型的特性
  在類似Visal Studio的設(shè)計(jì)器中,對(duì)于Form設(shè)計(jì)器的UI單元,通過(guò)反反射,可以枚舉其屬性,方法,事件……,當(dāng)然,你可以通過(guò)擴(kuò)充數(shù)據(jù)結(jié)構(gòu)來(lái)實(shí)現(xiàn),但如果用反射,你的代碼會(huì)更簡(jiǎn)潔,更沒(méi)有數(shù)據(jù)冗余,擴(kuò)展性更好,設(shè)計(jì)思路也更清哳,有人說(shuō),代碼就是最好的設(shè)計(jì)文檔。將代碼直接反射到應(yīng)用,在設(shè)計(jì)上看,顯然是最高效的。

1.3:提供感知編碼 
  在VB和一些高級(jí)開(kāi)發(fā)語(yǔ)言中,利用COM的typelib來(lái)實(shí)現(xiàn)感知編碼(動(dòng)態(tài)枚舉COM接口的方法,屬性,事件)。如今,有了反射,有了.NET的元數(shù)據(jù),COM的TypeLib方式就顯得過(guò)于多余而繁雜了。反射可以將其輕松搞定。

二:動(dòng)態(tài)執(zhí)行代碼。 
  反射,可以根據(jù)運(yùn)行時(shí)提供的字串,動(dòng)態(tài)生成類型實(shí)例,動(dòng)態(tài)執(zhí)行指定方法。 
  話雖短,意義在。我們來(lái)說(shuō)說(shuō)它可能的衍生。

2.1:程序晚綁定 
  在Win32中,我們?cè)肔oadlibrary和GetProcAddress來(lái)進(jìn)行調(diào)用方法晚綁定。 
  反射有些類似于晚綁定。晚綁定的好處呢,顯示加載程序集,構(gòu)造類型實(shí)例,調(diào)用方法,或許用到分析程序結(jié)構(gòu)方面。 
2.2:設(shè)計(jì)模式與反射 
  更進(jìn)一步,在設(shè)計(jì)模式中,我們喜歡用工廠方法來(lái)構(gòu)建實(shí)例,用抽象工廠來(lái)抽象工廠的子類。有命令模式來(lái)執(zhí)行命令,用Builder模式來(lái)生成不同的實(shí)體。這些,其實(shí)都可以用反射來(lái)簡(jiǎn)化(具體方法,就不寫(xiě)了哈)。 
  當(dāng)然,選擇這前要注意,你可能會(huì)以損失掉一些性能為代價(jià)。

2.3:序列化。 
  MFC中有序列化,但它并未提供任何指導(dǎo),也很不方便進(jìn)行擴(kuò)展。有了反射的幫忙,序列化時(shí)的字段枚舉變得簡(jiǎn)單,反序列化時(shí)的對(duì)象生成也輕而易舉。當(dāng)然,在FCL中已將相關(guān)應(yīng)用封存,很多時(shí)候,你感受不到反射為你帶來(lái)的好處。

2.4:異構(gòu)系統(tǒng)中的通訊 
  DCOM支持的三層架構(gòu)帶來(lái)了Windows的上一輪繁榮。但相關(guān)的部署升級(jí),包括其內(nèi)部實(shí)現(xiàn)原理的復(fù)雜性,總讓人總是撓頭。外加Java J2EE的重壓下,.NET進(jìn)行了改進(jìn)。 
  .NET中提供了全新遠(yuǎn)程通訊方式(Remoting),提供了強(qiáng)大的Web支持(Web XML)。據(jù)說(shuō),其中都大量應(yīng)用到反射。這點(diǎn),俺還沒(méi)時(shí)間去仔細(xì)查看,估計(jì)是在列集和反列集上使用到反射。當(dāng)然,肯定還有好多好多新東東,俺還沒(méi)時(shí)間去看。 
  不過(guò),偶以前倒是接觸到一個(gè)在異構(gòu)系統(tǒng)中對(duì)反射的簡(jiǎn)單應(yīng)用。 
  很簡(jiǎn)單,客戶端通過(guò)Web browser中的html,用http最簡(jiǎn)單的Post發(fā)送命令(定制的XML格式)程序,在服務(wù)器端對(duì)XML解析,實(shí)際上就是指定程序集,指定類型的指定調(diào)用。這樣,客戶端并不需要安裝任何類型,只需存在指定格式的代碼生成,一個(gè)穿越防火墻的系統(tǒng)就實(shí)現(xiàn)了,其中關(guān)鍵,仍然是反射。

2.5:特珠情況下的特殊應(yīng)用 
  在一些特殊的場(chǎng)合,反射還有一些特殊的作用。比如,有本書(shū)上舉了個(gè)例子,用靜態(tài)類來(lái)進(jìn)行委托的綁定,而代碼需要主動(dòng)的去觸發(fā)靜態(tài)類的Static構(gòu)造函數(shù),無(wú)它法,可以通過(guò)反射(CreateInstance)來(lái)實(shí)現(xiàn)?! ?nbsp;
  大概就這些了,如果看到新的東東,再補(bǔ)充。