日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > C# >内容正文

C#

委托学习总结(一)浅谈对C#委托理解

發(fā)布時(shí)間:2025/3/20 C# 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 委托学习总结(一)浅谈对C#委托理解 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

要理解委托,我們首先要知道委托的概念:

”委托是一個(gè)類,它定義了方法的類型,使得可以將方法當(dāng)作另一個(gè)方法的參數(shù)來(lái)進(jìn)行傳遞,這種將方法動(dòng)態(tài)地賦給參數(shù)的做法,可以避免在程序中大量使用If-Else(Switch)語(yǔ)句,同時(shí)使得程序具有更好的可擴(kuò)展性。“

這是百度上和許多教科書(shū)上都有的一個(gè)概念,但是初學(xué)這門編程語(yǔ)言的話,或者基礎(chǔ)比較差的童鞋,看到這句話,肯定是一臉懵比,先不用著急,我們來(lái)慢慢通過(guò)代碼去理解委托這個(gè)概念

(1)首先新建一個(gè)控制臺(tái)程序,對(duì)于初學(xué)者而言,控制臺(tái)程序是學(xué)習(xí)基礎(chǔ)知識(shí)的最好工具

//delegate void EvenHandler(object sender, EventArgs e);public delegate void MyDel();//自定義一個(gè)委托class Program{static void Main(string[] args){//(1)簡(jiǎn)單委托MyDel say1 = SayHi;MyDel say2 = new MyDel(SayHi);say1();say2();}static void SayHi(){Console.WriteLine("Hi World");}}

這是最簡(jiǎn)單的委托實(shí)例了,委托可以通過(guò)上面say1和say2兩種方式進(jìn)行調(diào)用,這里我們要知道委托也是一種類型,所以它和類是同級(jí)的,可以通過(guò)委托來(lái)掉用方法,不要誤以為委托和方法同級(jí)的,方法只是類的成員,還有定義委托和與之對(duì)應(yīng)的方法必須具有相同的方法簽名,即參數(shù)個(gè)數(shù),類型相同,返回值類型相同,上面代碼實(shí)例沒(méi)有什么實(shí)際意義,只是然我們知道委托的結(jié)構(gòu)以及委托與方法的關(guān)系

(2)委托的擴(kuò)展

//自定義一個(gè)委托public delegate int Expression(int a, int b);class Program{static void Main(string[] args){//(2)委托擴(kuò)展//Expression ex = GetEX;//Calculate(ex, 25, 10);Calculate(GetAdd, 25, 10);}static int Add(int a, int b){return a + b;}static int Divide(int a, int b){return a / b;}static int subtract(int a, int b){return a - b;}static int multiply(int a, int b){return a * b;}static int GetAdd(int a, int b){return a + b;}static void Calculate(Expression ex, int a, int b){Console.WriteLine(ex(a, b) + "\n");}}

和之前比,稍微把代碼復(fù)雜了那么一點(diǎn)點(diǎn),上面我們真正實(shí)現(xiàn)了“把方法當(dāng)作參數(shù)在另一個(gè)方法中傳遞或調(diào)用”,實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的加法方法,當(dāng)然我們也寫(xiě)了減法,乘法,除法的方法。你會(huì)想這樣寫(xiě)有什么好處呢?我直接調(diào)用自己的加減乘除方法不就完了嗎,何必要多此一舉,通過(guò)委托來(lái)折騰一番呢?委托的意義何在呢?在這里請(qǐng)先聽(tīng)我先說(shuō)一種思想:“上面的Calculate方法里面代碼比較少,只有一個(gè)簡(jiǎn)單的輸出語(yǔ)句,而且我們只想單純的實(shí)現(xiàn)一個(gè)簡(jiǎn)單加減乘除效果,所以你會(huì)感覺(jué)有點(diǎn)多次一舉,也可以說(shuō)本來(lái)就是多次一舉,但是你可以設(shè)想一下,假如我們這幾個(gè)加減乘除方法,它的代碼量非常龐大,但是這幾個(gè)方法的代碼相似度又非常高,但是每個(gè)方法里就只有一兩個(gè)小小的語(yǔ)句塊兒不一樣,那不是會(huì)讓你覺(jué)得很不爽,很想把它們整合,那怎么處理呢?你可能首先會(huì)想通過(guò)if,else if或者switch語(yǔ)句對(duì)不同部分的代碼塊做不同的處理,現(xiàn)在我只需要做加減乘除四個(gè)case,這個(gè)思路暫且可以接受,那將來(lái)我又要加余數(shù)運(yùn)算,平方運(yùn)算,指數(shù)對(duì)數(shù)運(yùn)算等等,假設(shè)我?guī)装賯€(gè)甚至更多個(gè)這樣類似的方法呢,那我豈不是要寫(xiě)幾百個(gè)if,else,這樣做很明顯程序的擴(kuò)展性會(huì)很差。所以我們要換個(gè)思路,我們完全可以通過(guò)一個(gè)方法把相同的部分封裝起來(lái),而不同的部分通過(guò)參數(shù)傳過(guò)去,但是方法并不能直接被當(dāng)作參數(shù)被傳遞和調(diào)用,那怎么辦呢?,那么這時(shí)候委托的作用就體現(xiàn)出來(lái)了,我們可以把委托作為參數(shù)傳遞給封裝好了的方法,通過(guò)委托來(lái)動(dòng)態(tài)的調(diào)用方法。”? 結(jié)合我所說(shuō)的思想,那么上面封裝的部分就類似與我們的Calculate方法,而不同的部分就是每個(gè)加減乘除方法,你可以假設(shè)Calculate是一個(gè)非常龐大的已經(jīng)封裝好了的方法,而我們傳進(jìn)去的只是這個(gè)方法需要?jiǎng)討B(tài)改變的部分,這樣就是最上面概念所謂的“方法動(dòng)態(tài)地賦給參數(shù)”,這樣寫(xiě)到好處是大大提升了方法的靈活性與擴(kuò)展性,也減少了代碼的冗余,所以委托在實(shí)際項(xiàng)目中是一個(gè)十分有用的工具,它可以使你的代碼更加的”舒適,健壯“。是不是感覺(jué)對(duì)委托的理解有那么一丟丟長(zhǎng)進(jìn)了,之后我還會(huì)繼續(xù)寫(xiě)關(guān)于學(xué)習(xí)匿名方法,lambda表達(dá)式,泛型委托,以及事件的相關(guān)學(xué)習(xí)心得。以上言論是我自己參考資料,和項(xiàng)目實(shí)戰(zhàn)后自己做出的總結(jié),如果又什么不對(duì)的地方,希望各位大神指出^^。

總結(jié)

以上是生活随笔為你收集整理的委托学习总结(一)浅谈对C#委托理解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。