?????有的人把委托看作是函數(shù)編程暖释,而我并不這么認(rèn)為,我覺得委托是為了更加接近OOP面向?qū)ο笤O(shè)計(jì)的仁堪,它把函數(shù)看作一個(gè)對(duì)象,只是與普通的對(duì)象存在一定的差異填渠。
? ? 我先看這樣一段代碼弦聂,如下:
在C#的定義中delegate是一個(gè)類型,但是它是一種特殊的類型氛什,方法的類型莺葫,它定義了方法參數(shù)和返回值,準(zhǔn)確的說它是方法的集合枪眉,因?yàn)樗梢詫?shù)個(gè)具有相同參數(shù)和返回值的方法累加起來形成一個(gè)鏈?zhǔn)椒磻?yīng)捺檬。代碼如下:
這種+=的方式是有順序的,之所以說它是鏈?zhǔn)椒磻?yīng)就是這個(gè)原因贸铜,這些方法就像鏈條一樣一個(gè)接一個(gè)執(zhí)行堡纬,直到最后一個(gè)。在C#中已經(jīng)為我們定義好了2個(gè)泛型模版的函數(shù)類型:Func和Action蒿秦,下面我們來看看如何使用它:
Action是一個(gè)沒有返回值的委托類型烤镐,你可以用如Action<T,T,...>的方式來定義要傳入的方法的參數(shù)格式,這里不多做介紹渤早。
Func是具有一個(gè)返回值的委托類型职车,用法與Action類似,但是最后后一個(gè)類型作為方法返回值鹊杖,并且它有且只有一個(gè)返回值悴灵。
可能大家都會(huì)存在一個(gè)疑問這種方式有什么好處,我舉個(gè)簡(jiǎn)單的例子:如果我們有一個(gè)游泳館骂蓖,在這個(gè)游泳館有3種人积瞒,一種是套路出牌做3件事 換泳衣 找泳池 游泳,第2種人直接穿著泳衣來登下,那它只用做兩件事 找泳池 游泳茫孔,最后一種是工作人員可能時(shí)刻準(zhǔn)備救人,它只有游泳一個(gè)動(dòng)作被芳,下面請(qǐng)看代碼:
這樣我們就可以控制這個(gè)鏈條了缰贝,當(dāng)然這只是一個(gè)直線的鏈條,你可以設(shè)計(jì)分叉的鏈條讓委托的參數(shù)也是委托畔濒,設(shè)計(jì)的更加豐富剩晴,如果想設(shè)計(jì)的更完美,請(qǐng)結(jié)合泛型。
我將繼續(xù)努力赞弥,如有問題請(qǐng)留言毅整,竭盡全力為您解憂