今天突然想到對委託的理解大致都忘了 就從新溫習了一下 希望能幫到大家
首先看一下MSDN對委託的解釋:
委託是一種定義方法簽名的類型。 當執行個體化委託時,您可以將其執行個體與任何具有相容簽名的方法相關聯。 您可以通過委託執行個體調用方法。
什麼是委託
首先要知道什麼是委託,用最通俗易懂的話來講,你就可以把委託看成是用來執行方法(函數)的一個東西。
如何使用委託
在使用委託的時候,你可以像對待一個類一樣對待它。即先聲明,再執行個體化。只是有點不同,類在執行個體化之後叫對象或執行個體,但委託在執行個體化後仍叫委託。
下面是我對於委託的理解代碼
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace 委託的應用 7 { 8 public delegate void wenhou(string name);//定義一個委託 wenhou 9 class Program10 {11 private static void Englishwenhou(string name)//定義一個英文的問候 輸出goodmorning + 名字12 {13 Console.WriteLine("GoodMorning{0}", name);14 }15 private static void Chineswenhou(string name)//定義一個中文的問候 輸出 早上好 +名字16 {17 Console.WriteLine("早上好{0}", name);18 }19 20 private static void delegatewenhou(string name, wenhou wh)//定義一個委託wenhou類型的變數 ,這個委託會根據方法名字的來調用方法 並且把參數傳入相應的方法21 {22 wh(name);23 }24 static void Main(string[] args)25 {26 /* 第一種使用委託的方法(此方法就是通過參數的形式來給委託傳值)27 28 29 delegatewenhou("曹俊", Englishwenhou); //設定為中文問候的委託30 31 Console.WriteLine("---------------------------------\n");32 33 delegatewenhou("jun.cao", Chineswenhou); //設定為英文問候的委託34 35 Console.ReadKey(); //擷取輸入的按鍵 -- 再次用於不立即關閉調試視窗36 */37 38 /*39 輸入:40 GoodMorning jun.cao41 ---------------------------------42 43 早上好曹俊44 */45 46 //第二種使用委託的方法(直接給委託傳值)47 48 49 50 wenhou wh = new wenhou(Englishwenhou);//向委託中添加英文問候的方法 ^-^ 是不是和執行個體化對象 和執行個體化類一樣? 實際上委託在編譯器執行的時候就是類 只不過委託是型別安全的。。。51 52 wh("jun.cao"); //通過委託調用的 英文問候53 Console.WriteLine("---------------------------------\n");54 wh += new wenhou(Chineswenhou); //向委託中添加中文問候的方法55 56 wh("曹俊"); // 調用委託 ,委託會依次 調用委託中綁定的方法57 Console.WriteLine("---------------------------------\n");58 59 wh -= new wenhou(Englishwenhou); //移除委託中的方法。 ^-^ 可以添加委託方法 就可以去除掉委託方法咯 += 是向委託中添加方法 -= 就是移除委託中已存在的方法60 61 wh("曹俊");62 63 Console.ReadKey();64 /*65 輸入:66 GoodMorningjun.cao67 ---------------------------------68 69 GoodMorning曹俊70 早上好曹俊71 ---------------------------------72 73 早上好曹俊74 75 76 */77 }78 }79 }