淺顯易懂的委託

2022-07-08 21:24:15 字數 2447 閱讀 7079

一、我對委託的理解

委託是方法的容器,它不生產方法,它只是方法的搬運工。

委託這個詞用到程式設計裡面對於很多新人來說可能都不太好理解,以前剛接觸委託的時候也看過不少文章,對於這個詞的解釋大多都雲裡霧裡。

但把「委託」換成「託付」,對於它的理解可能會清晰不少。

例如,劉備將兒子委託給了趙雲和劉備將兒子託付給了趙雲,這兩句話那句比較好理解些呢?我覺得是後者,後者更符合我對委託的理解——委託是方法的容器。

現在,我們以程式設計的思想來轉換一下這兩句話,劉備=應用程式,劉備兒子=方法,趙雲=容器(委託)

應用程式將方法委託給了容器,應用程式將方法託付給了容器,前者我們可能會想方法從**來,是要容器自己編寫嗎,有了方法後容器需要幹嘛呢?

但後者就比較清晰明了,應用程式將方法託付給了容器,說明方法有本來有的編寫好的,不需要自己去編寫的,然後託付給了容器那他就是容器的東西了,容器想幹嘛就幹嘛。

字面意思說出來,可能很多朋友還是雲裡霧裡,下面會用**給大家解釋一下,為什麼說委託是方法的容器。

二、委託的基本使用

1.生命委託的語法

delegate 接收的方法的返回值 委託名稱(接收方法的引數)

例:delegate int calculator(int numone,int numtwo);

上例中我們宣告了乙個名為「calculator」接收方法返回值型別為int,接收方法引數為int numone,int numtwo的委託

2.委託的基本使用

從上面的**可以看到我宣告了乙個名為「calculator」的委託,並將「getsun」方法給了它,最後求出結果為3。

看到這裡很多朋友應該是看不明白委託到底是幹嘛用的,咋們直接在mian裡面呼叫getsum不就好了嗎?何必還宣告乙個看起來毫無意義的委託呢?吃飽了沒事做想多敲**嗎?

別急,現在只是將委託的基本語法和用法,待講完多播委託匿名函式委託後會將委託的妙用,了解這些的小夥伴可以直接跳過進入妙用。

3.多播委託

這裡我心加了乙個「reduce」方法,並且為了便於觀察我在「reduce」方法和「getsun」方法中都輸出了一段話,至於它為什麼返回-1是因為它返回的是「reduce」的值。

可以看到,多播委託其實就是在原有委託基礎上在加乙個方法,這也證實了前面我說的委託是方法的容器,當委託裡面的方法有多個的時候這個委託就成了多播委託

當我們呼叫多播委託的時候它會按照委託裡面的方法的新增順序去執行方法體

4.匿名函式委託

通過上面的例子可以看到無論是普通委託還是多播委託,使用它都非常的麻煩都需要定義方法,並傳入其中,這樣比較麻煩,想一想,如果你要實現乙個有是個方法的多播委託,那是不是得定義十個方法,**量想想就恐怖。

上面也說過委託是方法的容器,所以這裡我們可以通過拉姆達表示式傳入匿名方法的方式來縮少一定的**量。

class

program

;//將匿名方法裝進委託

dg += (int num1, int num2) => ;

//呼叫委託

var sum = dg(1, 2

);

//輸出結果

console.writeline("

計算後的結果為:

"+sum);

console.readkey();}}

view code

這段**實現的效果和上面的多播委託的效果是一樣的,效果圖我就不發了

三、委託的妙用

看完上面的**肯定有很多朋友看不明白委託到底是幹嘛用的,為什麼我要寫多餘的**,要知道世間萬物皆有它存在的道理,委託也不例外,下面我將寫一些容易理解的例子讓大家理解下它的妙用!

晚上更新!

KMP演算法(淺顯易懂)

kmp演算法求解什麼型別問題 字串匹配。給你兩個字串,尋找其中乙個字串是否包含另乙個字串,如果包含,返回包含的起始位置。講道理 大串a 長度n 小串b 長度m 一般匹配字串,乙個乙個比,當前字元對了則比對下乙個,不對了再從b的頭開始比,移動乙個位置 這樣的時間複雜度是o n m kmp可以實現複雜度...

淺顯易懂的桶排序

想準備將所有的排序演算法都總結出來,方便你查閱,也方便我複習和記憶,下面來說桶排序 首先必須申明,桶排序和計數排序完全不同,不可混為一談 這裡例項用單鏈表來操作 還是老方法,看文字就是煩,直接上圖,結合,永遠都是王道 1.假設 桶待排序列 看了之後有沒有特莫感覺就是雜湊桶,哈哈,滿足一定條件差不多就...

python中yield的用法 淺顯易懂

def consumer name print s 準備吃包子啦 name while true baozi yield return返回的值.print 包子 s 來了,被 s 吃了 baozi,name c consumer 小華 print 華麗分割線1 print c.next print ...