打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
.net中的委托是什么意思

这篇文章主要介绍“.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中的委托是什么意思”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
.NET中的委托:细节详解-IT168 技术开发专区
C#委托三(多播委托)
面试中的委托
C#3.0学习笔记(7)浅谈委托
委托
动态类
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服