【发布时间】:2017-10-19 07:18:20
【问题描述】:
看了很多资料还是没看懂,谁能解释一下?
我知道什么:
声明一个事件:
public event MyEvent myEvent;
对比
声明事件处理程序:
public EventHandler MyEventHandler;
虽然 EventHandler 是 .NET 中的关键字:
public delegate void EventHandler (Send object, EventArgs e);
那么,EventHandler 是一个委托而不是一个事件,因为它没有在关键字“事件”中使用?
什么时候应该使用“Event”,什么时候应该使用“EventHandler”?
【问题讨论】:
-
event是引发事件的事物,某些事物将订阅该事件。EventHandler是处理事件的东西 - 即它指定用于订阅事件的方法。 -
一个事件有一个类型,它描述了事件引发时应该传递哪些参数以及事件处理程序必须要与事件兼容的参数类型是由委托声明描述。 EventHandler 就是这样一种声明(不是关键字),由框架提供。它规定事件处理程序必须有 2 个参数,每个人都将它们命名为 sender 和 e。 MyEvent 是另一个,由你提供,我们看不到。使用框架声明是个好主意,它使您的代码易于阅读。
-
你越来越近了。您声明了一个简单的事件,仅此而已。不是代表,那个来自框架。事件的行为很像属性。您使用属性来限制对私有字段的访问,外部代码必须使用 get 和 set 访问器。事件类似地限制对私有委托对象的访问,外部代码只能添加和删除事件处理程序。外部代码不能引发事件,不能强制委托对象为空,也不能取消订阅由其他代码注册的处理程序。限制访问是一件好事。
-
“虽然 EventHandler 是 .NET 中的关键字:” - 不,它不是。在您的代码中,
MyEvent和EventHandler都是委托类型,MyEventHandler是委托实例。
标签: c# events eventhandler