拒絕「高冷」詞彙!初學C 中的委託

2021-09-07 18:01:42 字數 1703 閱讀 6574

有一天,你寫了好多好多帶「形參」的建構函式(就是「方法」,同義),而且需要向這些建構函式裡傳遞同樣的「實參」,然後你就憨憨地乙個乙個函式的呼叫並賦予同樣的「實參」,這一天就這麼過去了...

又過了幾天,你又要再一次呼叫這麼多函式了,你再老老實實地乙個乙個函式進行呼叫?!聰明的你,肯定會想:真tm麻煩!有沒有一勞永逸的辦法呢?

你需要的正是----「委託」

來,先看乙個簡單的例子,要表述的是----有一位貴賓將要作客一家豪華的酒店,老闆(boss)下發了通知,他的兩個助理(ass1和ass2)分別要通知到女服務員(waiteress)和廚師(cooker),讓他們該幹啥幹啥去。

1 class program

2

19 20 //宣告乙個叫做「convey_dele」的委託,形參為「string command」

21 public delegate void convey_dele(string command);

22 23 //構造乙個名為「waiteress」的函式,建構函式的形參必須與委託形參一致!

24 public static void waiteress(string command)

25

29 30 public static void cooker(string command)

31

34 }

執行後的結果:

這樣,老闆發出任何指令,下級都該幹啥幹啥去,老闆不需要知道下級的具體動作是什麼,只要幹的好,完成就可以。

聰明的你,又會想,**能否再簡化和多樣化呢?可以。上面**可以更改為:

1 class program

2 ;

9 10 //匿名函式也太麻煩了,還得寫「delegate」,改用乙個符號來表示,術語「蘭姆達表示式」

11 ass2 = (string command) => ;

12 13 //等同於 ass1 = ass1 + ass2,基本的「加等」運算子,「減等」也是可以使用的~ 比如:若ass1 = ass1 + ass2,那ass1 -= ass1等同於ass1=ass2

14 ass1 += ass2;

15 16 ass1("一位貴賓要來了!");

17 18 console.readkey();

19 }

20 21 public delegate void convey_dele(string command);

22 }

執行後的結果與之前未簡化前一模一樣。這樣的簡化寫法還是有很強的「可讀性」的,「匿名函式」和「蘭姆達表示式」還有更簡單的寫法,只要是乙個形參,還可以連形參都省略,知道這回事就行了...

這樣,我們在呼叫眾多函式的時候就可以靈活運用委託來簡化**和「搬磚」的繁瑣勞動。

好了,初學委託的內容就先講這麼多吧,我也是在一邊學習,一邊去理解的,在寫部落格時表現出來的有許多不足之處請廣大園友指出,我不吝賜教!

C 中的委託

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

C 中的委託

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

C 中的委託

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