本文摘自PHP中文网,作者零下一度,侵删。
委托是.net中非常重要的特性,自.net 1.x版本就包含了,委托在项目开发过程中应用得非常多,但是一直以来很多同学对其理解得不是非常清楚(也包括我,虽然做开发很多年了,可能很多地方不知不觉也使用到了委托,但是仍然不是很清楚),那么我会整理一个系列文章来总结和加深一下对委托的印象。什么是委托
可以用两点概括:
1,最通俗的理解是,一个安全的'函数指针'。
2,本质上,委托是一个类(class)(可以通过IL证明如下图),并且委托包含的是具有相同方法签名相同返回值的多个方法。
委托的类图:
从上图我们可以得到几点信息,1,委托是一个类(class)。2,委托继承自System.MulticastDelegate类型。
为什么要使用委托
更通俗的说法是,使用委托能够带来什么好处。
下面通过一个小的例子来演示一下使用委托的好处。需求是,通过输入的name,控制台分别打印中文和英文的问候语。
不使用委托:
1 |
|
不使用委托的时候,需要使用一个枚举Language来表示使用中文问候还是英文问候,并且还要进行if...else...的判断。
当可以直接传递方法的时候也许就简单多了,下面来看一下。
使用委托:
1 |
|
所以总结起来,委托带来的好处主要有以下几点:
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中重要的特性委托的详细内容!
相关阅读 >>
更多相关阅读请进入《认识》频道 >>
C#高级编程(第11版) C# 7 & .NET Core 2.0(.NET开发经典名著)
作者:[美]克里斯琴·内格尔(Christian Nagel)著。出版时间:2019年3月。