引言:
公司主營業(yè)務(wù):成都做網(wǎng)站、成都網(wǎng)站制作、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)建站是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊有機(jī)會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)建站推出勃利免費(fèi)做網(wǎng)站回饋大家。上一個專題已經(jīng)和大家分享了我理解的——C#中為什么需要委托,專題中簡單介紹了下委托是什么以及委托簡單的應(yīng)用的,在這個專題中將對委托做進(jìn)一步的介紹的,本專題主要對委本質(zhì)和委托鏈進(jìn)行討論。
一、委托的本質(zhì)
平時我們很容易使用委托——用C#delegate關(guān)鍵字定義委托,再用new操作符構(gòu)造委托實例,然后通過調(diào)用委托實例來調(diào)用回調(diào)方法(就是用一個了委托對象的變量來代替方法名,這句話如果剛接觸的人不好理解的話,這里給個例子:MyDelegate mydelegate =new Mydelegate(obj.mymethod),MyDelegate是定義的一個委托,假設(shè)定義的是沒有參數(shù)的,然后調(diào)用委托實例是這樣的——mydelegate(), 大家可以發(fā)現(xiàn)此時調(diào)用委托和調(diào)用方法的方式是一模一樣的,如果沒有看前面mydelegate是個委托類型,大家都會認(rèn)為這是直接調(diào)用一個方法,而不是調(diào)用委托實例,通過這個例子大家應(yīng)該很容易明白了這句話了吧——用一個委托對象的變量來代替方法名),相信通過括號內(nèi)的講解后,相信大家又會對委托有進(jìn)一步的理解的——委托就是方法的代替品,委托變量此時著方法名,大家可以簡單理解委托是方法的一個 “外號”。
前面的都介紹了委托的一些使用和理解的,現(xiàn)在就讓我我們來進(jìn)一步看看編譯器和CLR在背后對我們用delegate關(guān)鍵字定義的委托類型做了些什么事情的,前一個專題中我和大家說過委托是一個類,這么是有根據(jù)的,因為我們在IDE中定義一個委托類型時,最終是通過編譯器將定義的代碼轉(zhuǎn)化為中間語言IL,然后再執(zhí)行中間語言中的代碼來轉(zhuǎn)化為本機(jī)代碼的,所以在Visual Studio中編寫的代碼只是一個包裝而已,真真程序執(zhí)行的是中間語言中的代碼的。現(xiàn)在就看看編譯器把我們定義的委托類型轉(zhuǎn)化為什么樣的中間語言代碼的。
當(dāng)我們在類中像下面這樣定義一個委托時:
public delegate void DelegateTest(int parm);
創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務(wù)器,動態(tài)BGP最優(yōu)骨干路由自動選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨(dú)有T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動現(xiàn)已開啟,新人活動云服務(wù)器買多久送多久。