將方法作為方法的引數 理解託付

2021-09-07 12:29:59 字數 2294 閱讀 4862

《.net開發之美》上對於託付寫到:「它們就像是一道檻兒,過了這個檻的人,認為真是太easy了,而沒有過去的人每次見到託付和事件就認為心裡別得慌,混身不自在。」我認為這句話就像是在說我自己一樣。於是我決定好好看看關於這方面的知識。

事實上非常多時候我感覺託付所起的作用與定義乙個僅僅是含有乙個方法的介面全然一樣的。他們實現的功能是同樣的。

如果有這樣乙個樣例:

事實上這個樣例非常easy,就是定義了乙個igreeting介面,裡面有乙個greetingpeople方法,englishgreeting和chinesegreeting都是通過實現這個介面來顯示的。

假設通過託付應該怎麼樣實現呢?

剛才的功能假設正常我們會選擇下面方法來實現:

public void greetpeople(string name, language lang)

}public void englishgreeting(string name)

public void chinesegreeting(string name)

public enum language//enum為列舉函式

static void main(string args)

可是這個方案須要我們重複改動列舉和greetpeople()方法。以適應新的需求。

假設你再細緻想想,假如greetpeople()方法能夠接受乙個引數變數。這個變數能夠代表還有乙個方法,當我們給這個變數賦值 englishgreeting的時候,它代表著 englsihgreeting() 這種方法;當我們給它賦值chinesegreeting 的時候,它又代表著chinesegreeting()方法。我們將這個引數變數命名為 makegreeting。那麼不是能夠如同給name賦值時一樣,在呼叫 greetpeople()方法的時候,給這個makegreeting 引數也賦上值麼(chinesegreeting或者englsihgreeting等)?然後,我們在方法體內。也能夠像使用別的引數一樣使用 makegreeting。

可是。因為makegreeting代表著乙個方法。它的使用方式應該和它被賦的方法(比方chinesegreeting) 是一樣的,比方:makegreeting(name)。

依照上面的思路,

public

void englishgreeting(string name)

public void chinesegreeting(string name)

string 定義了name引數所能代表的值的種類。也就是name引數的型別。

於是,託付出現了:它定義了makegreeting引數所能代表的方法的種類,也就是makegreeting引數的型別。

於是。從圖中能夠看出,生命了greetingdelegate: public

delegate

void

greetingdelegate(string name)。而且,在greetpeople 方法中。makegreeting

方法作為引數與

name

地位是一樣的。**例如以下:

private static void greetpeople(string name, greetingdelegate makegreeting)

同理,而既然託付greetingdelegate 和 型別 string 的地位一樣,都是定義了一種引數型別。那麼。我是不是也能夠這麼使用託付?

static void main(string args) {

greetingdelegate delegate1, delegate2;

delegate1 = englishgreeting;

delegate2 = chinesegreeting;

greetpeople("jimmy zhang", delegate1);

greetpeople("張子陽", delegate2);

console.readkey();

C 委託系列(一)將方法作為方法的引數

委託 和 事件在 net framework中的應用非常廣泛,然而,較好地理解委託和事件對很多接觸c 時間不長的人來說並不容易。它們就像是一道檻兒,過了這個檻的人,覺得真是太容易了,而沒有過去的人每次見到委託和事件就覺得心裡別 bi 得慌,混身不自在。本文中,我將通過兩個範例由淺入深地講述什麼是委託...

C 委託系列(一)將方法作為方法的引數

委託 和 事件在 net framework中的應用非常廣泛,然而,較好地理解委託和事件對很多接觸c 時間不長的人來說並不容易。它們就像是一道檻兒,過了這個檻的人,覺得真是太容易了,而沒有過去的人每次見到委託和事件就覺得心裡別 bi 得慌,混身不自在。本文中,我將通過兩個範例由淺入深地講述什麼是委託...

初學JS的slice 方法的負引數理解

slice 方法可提取字串的某個部分,並以新的字串返回被提取的部分。語法stringobject.slice start,end 引數描述 參 數描述 start 要抽取的片斷的起始下標。如果是負數,則該引數規定的是從字串的尾部開始算起的位置。也就是說,1 指字串的最後乙個字元,2 指倒數第二個字元...