我一直在使用自定义委托类型和通用Action
委托类型快乐地编写事件,而没有真正考虑我在做什么。
我为Action
和EventHandler
提供了一些很好的扩展助手,这使得我倾向于使用那些预定义的委托类型而不是我自己的委托类型,但除此之外......
除了惯例之外,还有一个很好的理由支持EventHandler
和EventHandler<T>
而不是自定义委托类型或通用Action
委托类型吗?
答案 0 :(得分:7)
签名EventHandler<T>
相对于EventArgs
的每个成员使用一个参数的主要优点是,您可以在不破坏兼容性的情况下向EventArgs
添加其他属性。
IMO这是最重要的论点。能够在不破坏订阅代码的情况下扩展您的EventArgs
非常好。但是当然你可以使用任何使用某种property-bag参数的签名来实现相同的功能,而不是每个属性的参数。
然后存在差异,EventHandler<Base>
可转换为EventHander<Derived>
,因此您可以编写带参数EventArgs
的EventHandler,并且可以订阅具有更具体EventArgs
的事件
扩展方法是另一个优点,但你已经提到了。
答案 1 :(得分:2)
不,没有充分的理由。
如果您的活动不需要EventArgs
或sender
个对象,则无需使用EventHandler
或EventHandler<T>
。
答案 2 :(得分:1)
EventHandler
惯例的原因是它支持统一的事件处理方式。
例如,EventHandler
总是有一个sender
,这很方便。
这里的经验法则是,当您使用WinForms并创建自定义控件或扩展自定义控件时。 Form
,你真的应该使用EventHandler
。对于你自己的课程:狂野。