您好,登錄后才能下訂單哦!
這篇文章主要介紹“.net中的委托是什么意思”,在日常操作中,相信很多人在.net中的委托是什么意思問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對(duì)大家解答”.net中的委托是什么意思”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!
可以用兩點(diǎn)概括:
1,最通俗的理解是,一個(gè)安全的'函數(shù)指針'。
2,本質(zhì)上,委托是一個(gè)類(class)(可以通過IL證明如下圖),并且委托包含的是具有相同方法簽名相同返回值的多個(gè)方法。
委托的類圖:
從上圖我們可以得到幾點(diǎn)信息,1,委托是一個(gè)類(class)。2,委托繼承自System.MulticastDelegate類型。
更通俗的說法是,使用委托能夠帶來什么好處。
下面通過一個(gè)小的例子來演示一下使用委托的好處。需求是,通過輸入的name,控制臺(tái)分別打印中文和英文的問候語。
不使用委托:
1 namespace DelegateDemo 2 { 3 class Program 4 { 5 static void Main(string[] args) 6 { 7 //通過輸入的name,控制臺(tái)分別打印中文和英文的問候語 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 }
不使用委托的時(shí)候,需要使用一個(gè)枚舉Language來表示使用中文問候還是英文問候,并且還要進(jìn)行if...else...的判斷。
當(dāng)可以直接傳遞方法的時(shí)候也許就簡單多了,下面來看一下。
使用委托:
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,控制臺(tái)分別打印中文和英文的問候語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 }
所以總結(jié)起來,委托帶來的好處主要有以下幾點(diǎn):
1,省去了大量的 if...else...或switch... 的判斷,使得程序更面向?qū)ο罅恕?/p>
2,解耦,程序更容易擴(kuò)展。例子:Tracy.Proxy接口代理組件,記錄xml日志和性能日志。
當(dāng)然,這只是一個(gè)例子,目的是說明使用委托帶來的好處,其實(shí)還有很多地方都使用到了委托,比如winform和webform的按鈕click事件,Linq中的Func和Action委托等。
1,winform和webform的按鈕click事件。
2,Linq中的Func和Action委托。
3,Tracy.Proxy接口代理組件
用XMind來總結(jié)一下:
到此,關(guān)于“.net中的委托是什么意思”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。