这篇文章主要介绍“.net中的委托是什么意思”,在日常操作中,相信很多人在.net中的委托是什么意思问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”.net中的委托是什么意思”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
可以用两点概括:
1,最通俗的理解是,一个安全的'函数指针'。
2,本质上,委托是一个类(class)(可以通过IL证明如下图),并且委托包含的是具有相同方法签名相同返回值的多个方法。
委托的类图:
从上图我们可以得到几点信息,1,委托是一个类(class)。2,委托继承自System.MulticastDelegate类型。
更通俗的说法是,使用委托能够带来什么好处。
下面通过一个小的例子来演示一下使用委托的好处。需求是,通过输入的name,控制台分别打印中文和英文的问候语。
不使用委托:
不使用委托的时候,需要使用一个枚举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中的委托是什么意思”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
联系客服