您好,登錄后才能下訂單哦!
這篇文章主要介紹“.net中的委托是什么意思”,在日常操作中,相信很多人在.net中的委托是什么意思問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”.net中的委托是什么意思”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
可以用兩點概括:
1,最通俗的理解是,一個安全的'函數指針'。
2,本質上,委托是一個類(class)(可以通過IL證明如下圖),并且委托包含的是具有相同方法簽名相同返回值的多個方法。
委托的類圖:
從上圖我們可以得到幾點信息,1,委托是一個類(class)。2,委托繼承自System.MulticastDelegate類型。
更通俗的說法是,使用委托能夠帶來什么好處。
下面通過一個小的例子來演示一下使用委托的好處。需求是,通過輸入的name,控制臺分別打印中文和英文的問候語。
不使用委托:
1 namespace DelegateDemo 2 { 3 class Program 4 { 5 static void Main(string[] args) 6 { 7 //通過輸入的name,控制臺分別打印中文和英文的問候語 8 Hello("麥子", Language.Chinese); 9 Hello("mcgrady", Language.English);10 11 Console.ReadKey();12 }13 14 /// <summary>15 /// 問候16 /// </summary>17 /// <param name="name"></param>18 /// <param name="lang"></param>19 private static void Hello(string name, Language lang)20 {21 if (lang == Language.Chinese)22 {23 ChineseHello(name);24 }25 if (lang == Language.English)26 {27 EnglishHello(name);28 }29 }30 31 /// <summary>32 /// 中文問候33 /// </summary>34 /// <param name="name"></param>35 private static void ChineseHello(string name)36 {37 Console.WriteLine(string.Format("你好,{0}", name));38 }39 40 /// <summary>41 /// 英文問候42 /// </summary>43 /// <param name="name"></param>44 private static void EnglishHello(string name)45 {46 Console.WriteLine(string.Format("hello,{0}", name));47 }48 49 }50 51 /// <summary>52 /// 語言類型53 /// </summary>54 public enum Language55 {56 English,57 Chinese58 }59 }
不使用委托的時候,需要使用一個枚舉Language來表示使用中文問候還是英文問候,并且還要進行if...else...的判斷。
當可以直接傳遞方法的時候也許就簡單多了,下面來看一下。
使用委托:
1 namespace DelegateDemo 2 { 3 //聲明委托 4 delegate void MyDel(string name); 5 6 class Program 7 { 8 static void Main(string[] args) 9 {10 //通過輸入的name,控制臺分別打印中文和英文的問候語11 Hello("麥子", ChineseHello);12 Hello("mcgrady", EnglishHello);13 14 Console.ReadKey();15 }16 17 /// <summary>18 /// 問候19 /// </summary>20 /// <param name="name"></param>21 /// <param name="myDel"></param>22 private static void Hello(string name, MyDel myDel)23 {24 myDel(name);25 }26 27 /// <summary>28 /// 中文問候29 /// </summary>30 /// <param name="name"></param>31 private static void ChineseHello(string name)32 {33 Console.WriteLine(string.Format("你好,{0}", name));34 }35 36 /// <summary>37 /// 英文問候38 /// </summary>39 /// <param name="name"></param>40 private static void EnglishHello(string name)41 {42 Console.WriteLine(string.Format("hello,{0}", name));43 }44 45 }46 }
所以總結起來,委托帶來的好處主要有以下幾點:
1,省去了大量的 if...else...或switch... 的判斷,使得程序更面向對象了。
2,解耦,程序更容易擴展。例子:Tracy.Proxy接口代理組件,記錄xml日志和性能日志。
當然,這只是一個例子,目的是說明使用委托帶來的好處,其實還有很多地方都使用到了委托,比如winform和webform的按鈕click事件,Linq中的Func和Action委托等。
1,winform和webform的按鈕click事件。
2,Linq中的Func和Action委托。
3,Tracy.Proxy接口代理組件
用XMind來總結一下:
到此,關于“.net中的委托是什么意思”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。