標籤:
先上委託的例子:
1 using System; 2 3 delegate int myDelegateHandler(int a, int b); 4 5 public class A 6 { 7 //靜態方法 8 public static int M1(int a, int b) 9 {10 return a + b;11 }12 }13 14 public class Test15 {16 public static void Main()17 {18 //執行個體一個委託19 myDelegateHandler tmp = new myDelegateHandler(A.M1);20 //調用委託21 int sum = tmp(1, 3);22 Console.WriteLine(sum.ToString());23 24 }25 }
委託的好處:提高可擴充性!
委託其實是一個類,定義了方法的類型,使得可以把方法當作另外一個方法的參數來進行傳遞,這樣可以實現動態賦參數,有時可以避免大量分支結構(if-else),使得程式具有良好的可擴充性。說的這裡,想必大家已經清楚了“委託”的含義了吧。
再舉個例子:List<T>類型的Find方法的參數也是一個委託,它把“怎麼去尋找”或者說“怎麼樣才算找到”這個問題留給了開發人員。開發人員只需要定義一個參數為T,傳回值為布爾型的函數,實現函數體,並將函數作為參數傳給Find方法,就可以完成集合中元素的尋找。
瞭解C++ STL的可能會聯想到:sort這個函數,允許使用者自訂比較函數,道理是類似的,不過C++裡面並不叫委託,但是傳遞函數的思想是一致的。
委託鏈:
1 using System; 2 3 public class FuWuYuan 4 { 5 public static void BuyTicket() 6 { 7 Console.WriteLine("每次都讓我去買票,囧"); 8 } 9 10 public static void BuyMovieTicket()11 {12 Console.WriteLine("而且還要讓我帶電影票,囧");13 }14 }15 16 class LaoBan17 {18 public delegate void BugTicketEventHandler();19 20 public static void Main(string[] args)21 {22 BugTicketEventHandler myDelegate = new BugTicketEventHandler(FuWuYuan.BuyTicket);23 myDelegate += FuWuYuan.BuyMovieTicket;24 myDelegate();25 }26 }
其實就是讓同一個人“做多件事情!”。
C#學習第九彈之委託