EventHandler应该总是用于事件吗?
问题描述:
我一直在使用自定义委托类型和通用的Action
委托类型快乐地编写事件,而没有真正考虑我在做什么。EventHandler应该总是用于事件吗?
我有一些很好的扩展佣工为Action
和EventHandler
这使我倾向于使用这些预定义的委托类型,而不是我自己的,但除了...
是否有其他比常规赞成一个很好的理由EventHandler
和EventHandler<T>
超过自定义委托类型或泛型Action
委托类型?
答
签名EventHandler<T>
超过使用一个参数为您EventArgs
的每个成员的主要优点是,你可以对你的EventArgs
添加附加属性,而不破坏兼容性。
IMO这是最重要的论据。能够在不破坏订阅代码的情况下扩展您的EventArgs
是非常好的。但是,当然,对于任何使用某种属性包参数而不是每个属性参数的签名,您都可以实现同样的效果。
然后有差异,EventHandler<Base>
可转换为EventHander<Derived>
,这样你就可以用参数EventArgs
写一个事件处理程序,它可以订阅到有更具体的EventArgs
事件。
扩展方法是另一个加号,但您已经提到过。
答
不,没有很好的理由。
如果您的活动不需要EventArgs
或sender
对象,则不需要使用EventHandler
或EventHandler<T>
。
答
原因EventHandler
是惯例,它支持统一的事件处理方式。
例如EventHandler
总是有一个sender
它派上用场。
这里的经验法则是,当您使用WinForms并创建自定义控件或扩展例如Form
,你真的应该使用EventHandler
。对于你自己的班级:疯狂。
我喜欢这些论点。我认为我倾向于Action ,因为创建EventArgs类时存在固有的额外Faff;下次会更仔细地考虑我的选择:) – Andy 2011-01-28 12:41:57