EventHandler应该总是用于事件吗?

EventHandler应该总是用于事件吗?

问题描述:

我一直在使用自定义委托类型和通用的Action委托类型快乐地编写事件,而没有真正考虑我在做什么。EventHandler应该总是用于事件吗?

我有一些很好的扩展佣工为ActionEventHandler这使我倾向于使用这些预定义的委托类型,而不是我自己的,但除了...

是否有其他比常规赞成一个很好的理由EventHandlerEventHandler<T>超过自定义委托类型或泛型Action委托类型?

签名EventHandler<T>超过使用一个参数为您EventArgs的每个成员的主要优点是,你可以对你的EventArgs添加附加属性,而不破坏兼容性。
IMO这是最重要的论据。能够在不破坏订阅代码的情况下扩展您的EventArgs是非常好的。但是,当然,对于任何使用某种属性包参数而不是每个属性参数的签名,您都可以实现同样的效果。

然后有差异,EventHandler<Base>可转换为EventHander<Derived>,这样你就可以用参数EventArgs写一个事件处理程序,它可以订阅到有更具体的EventArgs事件。

扩展方法是另一个加号,但您已经提到过。

+0

我喜欢这些论点。我认为我倾向于Action ,因为创建EventArgs类时存在固有的额外Faff;下次会更仔细地考虑我的选择:) – Andy 2011-01-28 12:41:57

不,没有很好的理由。

如果您的活动不需要EventArgssender对象,则不需要使用EventHandlerEventHandler<T>

原因EventHandler是惯例,它支持统一的事件处理方式。

例如EventHandler总是有一个sender它派上用场。

这里的经验法则是,当您使用WinForms并创建自定义控件或扩展例如Form,你真的应该使用EventHandler。对于你自己的班级:疯狂。