首先,为什么需要event ?
如果给一个委托对象追加订阅者,本应用+=号,结果误操作用成了=号,则表面上会清空委托对象的所有目标方法,即清空所有订阅者。
最好的解决方案是根本不要为包容类外部的对象提供对赋值操作符(=)的支持。event关键字的作用就是提供额外的封装,避免不小心取消了其他订阅者。事件实现了对订阅的封装。
定义了这个事件:
public event MyDelegate myEvent
实际上编译器会翻译成如下:
public MyDelegate _myEvent;
public event MyDelegate myEvent
{
add => _myEvent += value;
remove => _myEvent -= value;
}
编译器对事件上的+=和-=运算符操作相应地调用事件的add或remove访问器。
add和remove关键字明确了事件的访问器,就像属性的访问器那样。
下面