溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

.net中的委托是什么意思

發(fā)布時(shí)間:2021-08-18 09:47:41 來源:億速云 閱讀:167 作者:chen 欄目:編程語言

這篇文章主要介紹“.net中的委托是什么意思”,在日常操作中,相信很多人在.net中的委托是什么意思問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對(duì)大家解答”.net中的委托是什么意思”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!

什么是委托

可以用兩點(diǎn)概括:

1,最通俗的理解是,一個(gè)安全的'函數(shù)指針'。

2,本質(zhì)上,委托是一個(gè)類(class)(可以通過IL證明如下圖),并且委托包含的是具有相同方法簽名相同返回值的多個(gè)方法。

.net中的委托是什么意思

委托的類圖:

.net中的委托是什么意思

從上圖我們可以得到幾點(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委托等。

委托的應(yīng)用場(chǎng)景

1,winform和webform的按鈕click事件。

2,Linq中的Func和Action委托。

3,Tracy.Proxy接口代理組件

用XMind來總結(jié)一下:

.net中的委托是什么意思

到此,關(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í)用的文章!

向AI問一下細(xì)節(jié)

免責(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)容。

AI