C#學習第九彈之委託

來源:互聯網
上載者:User

標籤:

先上委託的例子:

 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#學習第九彈之委託

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.