C 中的委託

2022-02-05 05:03:55 字數 2287 閱讀 1375

自學的過程中,一直沒跨過委託這個檻兒,今天剛好有點空,拿起書對照著msdn再看了一遍。簡要記錄一二,以供後續溫習之便。

msdn官方原文:委託是一種定義方法簽名(由返回型別和引數組成)的型別,可以與具有相容簽名的任何方法關聯。

可以通過委託呼叫方法。

委託用於將方法作為引數傳遞給其他方法。

委託入門

使用委託的規則如下:首先使用 delegate 關鍵字宣告乙個委託型別,指定其返回型別和引數。通過 new 操作符,可以使用委託宣告來建立乙個委託型別的例項。在建立委託型別的例項時,目標方法必須與委託宣告的簽名精確匹配。

下面先給出乙個陣列氣泡排序的示例**,後面對此進行改造以講解如何使用委託。

namespace hans_gis.delegateexample01

; for (int i = 0; i < array.length - 1; i++)}}

foreach (int i in array)

", i);

}console.readkey();

}static bool greater(int inum1, int inum2)

else}}

}

對上述**略加改造,宣告乙個委託,建立委託例項,為之分配比較數值大小的方法,就可以呼叫委託了。如下所示:

namespace hans_gis.delegateexample01

; for (int i = 0; i < array.length - 1; i++)}}

foreach (int i in array)

", i);

}console.readkey();

}static bool greater(int inum1, int inum2)

else}}

}

每個委託都有自己的簽名,例如上面的示例中委託宣告:delegate bool compare(int i1,int i2),這裡所說的簽名就是指該委託有兩個int型別的引數,還有乙個bool型別的返回值。在例項化委託時,需要為其分配乙個方法,將其作為其建構函式的引數,如 compare com = new compare(greater),在這裡,compare委託的例項com引用了greater方法,呼叫com的時也就會呼叫greater方法了。值得注意的是,該方法必須與委託宣告具有同樣的簽名。如上例中的static bool greater(int inum1, int inum2)。

多路廣播委託

呼叫委託時,它可以呼叫多個方法,這稱之為多路廣播委託。可以使用加法運算子或加法賦值運算子(「+」或「+=」)向委託的方法列表(呼叫列表)中新增額外的方法;可以使用減法運算子或減法賦值運算子(「-」或「-=」)從呼叫列表中移除方法。

namespace hans_gis.delegateexample02

static void uppercaselast(string input)

static void uppercaseall(string input)

static void writeoutput(string input, string strre)

", input);

console.writeline("your string after: ", strre);

}static void main()}}

結果輸出:

委託的非同步**

既然委託例項是乙個物件,那麼就可以將其作為引數進行傳遞,也可以將其賦值給屬性。如此,方法便可以接受乙個委託引數,並且之後可以呼叫該委託,這稱之為非同步**。

對上面多路廣播委託的**做了一點改動,如下:

namespace hans_gis.delegateexample03

static string uppercaselast(string input)

static string uppercaseall(string input)

static void writeoutput(string input, uppercasedelegate del)

", input);

console.writeline("your string after: ", del(input));

}static void main()}}

輸出結果同上。

C 中的委託

委託是個比較讓人費解的東西,最近把這個東西翻來覆去看了幾遍了,有了些想法,希望能對同樣卡在這裡的同志一些啟發。在這裡主要提供一種理解思路,畢竟像基本語法 規範之類的,查參考書是最好的了。首先來看看乙個宣告乙個物件的過程 class someclass 定義乙個類 someclass sample 宣...

C 中的委託

c 中的委託 引言 c 中的委託著實讓我迷惑 我是位初學者 在不同的c 書籍中,還譯為 委派等,經反覆查閱資料和自己動手編寫 才稍稍理出點頭緒。c 中的委託類似於c或c 中的函式指標,但兩者有本質區別 c或c 不是型別安全的,但c 中的委託是物件導向的,而且是型別安全的。從技術角度來講,委託是乙個引...

C 中的委託

1.委託概述 委託是c 中新加入的乙個型別,可以把它想作乙個和class類似的一種型別,和使用類相似,使用乙個委託時,需要兩個步驟,首先你要定義乙個委託,就像是定義乙個類一樣 然後,你可以建立乙個或多個該委託的例項。定義乙個委託的語法是這樣的 public protected private del...