c# - 事件内部 : In .net 事件在内部是如何表示的?

标签 c# .net

我有一个基本的疑问。在内部,事件如何表示为方法或(字段)对象。如果事件是一个字段,那么如何在接口(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)中指定事件时,您所做的就是任何实现类都应该具有事件的 addremove 方法。事实上,这与在接口(interface)上声明属性非常相似。

这也是为什么您只能在声明的类中调用或重新分配事件的原因 - 类中对 MyEvent 事件的任何引用都被重新路由以直接使用委托(delegate),而在类之外,您只能访问 addremove 方法,而不能直接访问委托(delegate)。

关于c# - 事件内部 : In .net 事件在内部是如何表示的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2644612/

相关文章:

c# - Entity Framework Core 唯一索引测试

c# - Open XML SDK 读取大型 excel 文件的性能如何?

c# - 应用程序异常关闭时删除RabbitMQ Queue

.net - 如何在 MVC 中返回 XML 字符串作为操作结果

c# - 在 C# 中重写 protected 内部虚方法

c# - Guids 的 SQLite 参数问题

c# - 是否有像 [Table()] 这样的属性来创建映射到 EF Code First 中的 View 的类?

c#舍入规则

C#读取文件内容和查找字符串

c# - 在 C# 中使用正则表达式提取文本部分