委托是类型,可以将方法作为变量/参数进行传递;
委托的作用及场景:
1、实现类与类、模块与模块之间进行通信交互,场景:如asp.net core中的中间件及管道处理模型;
2、实现代码重用,场景:将公共代码进行封装,而差异代码交由调用方通过委托来传入;
事件是一种特殊的委托实例,事件主要是为了针对发布/订阅的应用场景抽象出来的概念,是委托实例集合中的子集;
关键字:delegate(委托)、event(事件),关键字仅仅是关键字,并不代表委托、也不代表事件;
委托与事件的区别解释截图
class Program { // 定义的一个委托 public delegate void TestDelegate(); //TestDelegate就叫做委托,此时它还是一个类,并不是实例,可以用它去创造实例 public event delegate void TestEvent(); //会发现这样写法在编译器检查时是通过不了的,错误的写法 public event TestDelegate TestEvent2; //这样的写法是正确的,而TestEvent2就是事件,它其实就是TestDelegate创造出来的实例; //而event在此处的作用,是对委托做出约束,约束该实例只能由类的内部调用,同时在订阅 //和取消订阅时只能通过+=,-=标识符来操作 void Main(string[] args) { TestDelegate testDelegate = new TestDelegate(Fc1); //委托必须要创建实例才能执行 testDelegate(); //委托执行 TestEvent2(); //事件已经是实例,可以直接执行 } public void void Fc1() { } }
原文:https://www.cnblogs.com/hjwcore/p/14744372.html