委托(Delegate)和事件(Event)
观察者模式
定义了对象一对多依赖,当一个对象改变时,所有依赖者都会收到通知并自我更新。
需知
- 方法组转换
支持从(多个)方法到兼容的委托类型的隐式转换。 - 逆变性
方法获取的参数类型可以是(委托的)参数的类型的基类。 - 协变性
方法返回类型可以是从(委托的)返回类型派生的派生类。 - 回调
将方法(或委托实例)作为(能隐式转换的委托类型的)参数传给其他方法来决定何时调用。 - 委托是类,所有委托类型派生自System.MulticastDelegate(多播委托),而多播委托派生自System.Delegate类。
- 方法组转换
委托的使用
[访问修饰符] delegate [返回类型] [委托类型] ([参数类型 参数])
如:internal delegate void Mydelegate(int Num);
Mydelegate dele = new Mydelegate(Func_1)或者Mydelegate dele =Func_1 ;
dele+=Func_2;
dele-=Func_2;通过System.Delegate.Combine/System.Delegate.Remove将委托实例从调用列表中加入或移除,上述运算符重载方式是简化后的方式。通过管理委托实例数组,以委托链的形式来调用多个绑定的方法,这些方法会根据绑定的顺序来依次调用。
尽管在使用时可以直接使用添加/删减方法名的方式来增减回调函数,