我有一个基本的疑问。在内部,事件如何表示为方法或(字段)对象。如果事件是一个字段,那么如何在接口(interface)定义中仍然包含事件。
谢谢 杰兹
最佳答案
如果你输入:
public event EventHandler MyEvent;
编译器生成的是(简化的)这个:
// declares a normal delegate of type 'EventHandler'
private EventHandler _myEvent;
// declares 'add_MyEvent' and 'remove_MyEvent' methods similar to a property
public event EventHandler MyEvent {
add { _myEvent += value; }
remove { _myEvent -= value; }
}
事件类似于属性;一个围绕委托(delegate)的包装器,它只允许添加或删除方法。这样您就无法完全重新分配委托(delegate)并删除其他人对其的订阅。
在接口(interface)中指定事件时,您所做的就是任何实现类都应该具有事件的 add
和 remove
方法。事实上,这与在接口(interface)上声明属性非常相似。
这也是为什么您只能在声明的类中调用或重新分配事件的原因 - 类中对 MyEvent
事件的任何引用都被重新路由以直接使用委托(delegate),而在类之外,您只能访问 add
和 remove
方法,而不能直接访问委托(delegate)。
关于c# - 事件内部 : In .net 事件在内部是如何表示的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2644612/