拒绝“高冷”词汇!初学C#中的委托
拒絕“高冷”詞匯!初學(xué)C#中的委托
有一天,你寫了好多好多帶“形參”的構(gòu)造函數(shù)(就是“方法”,同義),而且需要向這些構(gòu)造函數(shù)里傳遞同樣的“實(shí)參”,然后你就憨憨地一個(gè)一個(gè)函數(shù)的調(diào)用并賦予同樣的“實(shí)參”,這一天就這么過去了...
又過了幾天,你又要再一次調(diào)用這么多函數(shù)了,你再老老實(shí)實(shí)地一個(gè)一個(gè)函數(shù)進(jìn)行調(diào)用?!聰明的你,肯定會(huì)想:真TM麻煩!有沒有一勞永逸的辦法呢?
你需要的正是----“委托”
?
來,先看一個(gè)簡單的例子,要表述的是----有一位貴賓將要作客一家豪華的酒店,老板(boss)下發(fā)了通知,他的兩個(gè)助理(ass1和ass2)分別要通知到女服務(wù)員(Waiteress)和廚師(Cooker),讓他們該干啥干啥去。
1 class Program2 {3 static void Main(string[] args)4 {5 //委托就是個(gè)“類”,也需要“實(shí)例化”,讓“ass1”通知“Waiteress”。6 Convey_Dele ass1 = new Convey_Dele(Waiteress);7 8 //讓“ass2”通知“Cooker”9 Convey_Dele ass2 = new Convey_Dele(Cooker); 10 11 //“boss”通知兩個(gè)助理“ass1和ass2”,術(shù)語為“合并委托(或“多路廣播委托”)” 12 Convey_Dele boss = new Convey_Dele(ass1 + ass2); 13 14 //“boss”發(fā)話 15 boss("一位貴賓要來了!"); 16 17 Console.ReadKey(); 18 } 19 20 //聲明一個(gè)叫做“Convey_Dele”的委托,形參為“string command” 21 public delegate void Convey_Dele(string command); 22 23 //構(gòu)造一個(gè)名為“Waiteress”的函數(shù),構(gòu)造函數(shù)的形參必須與委托形參一致! 24 public static void Waiteress(string command) 25 { 26 //“Waiteress”要去干的事兒 27 Console.WriteLine("女服務(wù)員接到通知:" + command + "所以她要去迎接客人"); 28 } 29 30 public static void Cooker(string command) 31 { 32 Console.WriteLine("廚師也接到了通知:" + command + "所以他去準(zhǔn)備飯菜"); 33 } 34 }運(yùn)行后的結(jié)果:
這樣,老板發(fā)出任何指令,下級都該干啥干啥去,老板不需要知道下級的具體動(dòng)作是什么,只要干的好,完成就可以。
?
聰明的你,又會(huì)想,代碼能否再簡化和多樣化呢?可以。上面代碼可以更改為:
1 class Program2 {3 static void Main(string[] args)4 {5 Convey_Dele ass1, ass2;6 7 //另寫函數(shù)再實(shí)例化太麻煩了,直接在這里把函數(shù)一起寫了。術(shù)語“匿名函數(shù)”,“delegate”是關(guān)鍵字8 ass1 = delegate (string command) { Console.WriteLine("女服務(wù)員接到通知:" + command + "所以她要去迎接客人"); };9 10 //匿名函數(shù)也太麻煩了,還得寫“delegate”,改用一個(gè)符號來表示,術(shù)語“蘭姆達(dá)表達(dá)式” 11 ass2 = (string command) => { Console.WriteLine("廚師也接到了通知:" + command + "所以他去準(zhǔn)備飯菜"); }; 12 13 //等同于 ass1 = ass1 + ass2,基本的“加等”運(yùn)算符,“減等”也是可以使用的~ 比如:若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 }?運(yùn)行后的結(jié)果與之前未簡化前一模一樣。這樣的簡化寫法還是有很強(qiáng)的“可讀性”的,“匿名函數(shù)”和“蘭姆達(dá)表達(dá)式”還有更簡單的寫法,只要是一個(gè)形參,還可以連形參都省略,知道這回事就行了...
?這樣,我們在調(diào)用眾多函數(shù)的時(shí)候就可以靈活運(yùn)用委托來簡化代碼和“搬磚”的繁瑣勞動(dòng)。
?
好了,初學(xué)委托的內(nèi)容就先講這么多吧,我也是在一邊學(xué)習(xí),一邊去理解的,在寫博客時(shí)表現(xiàn)出來的有許多不足之處請廣大園友指出,我不吝賜教!
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的拒绝“高冷”词汇!初学C#中的委托的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ZBLOG-ASP2.2如何给图片增加A
- 下一篇: POJ-3067 Japan---树状数