为什么从Event Arg将自定义事件处理程序的参数作为参数

时间:2009-07-24 19:09:43

标签: c# events event-handling delegates

来自How to: Publish Events that Conform to .NET Framework Guidelines

  

虽然课程中的事件是你的   define可以基于任何有效的   委托类型,甚至代表那个   一般来说,返回一个值   建议您以事件为基础   在.NET Framework模式上使用   EventHandler,如图所示   以下示例。

为什么呢?怎么样:

public delegate void GenericEventHandler<TType, TArgs>(TType sender, TArgs args);
public event GenericEventHandler<SomeSender, SomeArg> SomeEvent;

2 个答案:

答案 0 :(得分:2)

主要是因为任何带有签名(object sender, EventArgs e)的方法都可以处理您的事件。请记住,委托是变体(协变返回类型和逆变参数类型)。

答案 1 :(得分:1)

只是为了使这个更新:从.NET 4.5开始就没有这样的约束。新的签名是:

[SerializableAttribute]
public delegate void EventHandler<TEventArgs>(
    Object sender,
    TEventArgs e
)

以前是:

[SerializableAttribute]
public delegate void EventHandler<TEventArgs>(
    Object sender,
    TEventArgs e
)
where TEventArgs : EventArgs

我无法找到这种改变的原因。如果有人可以向.NET开发人员提供他们决定的解释,那就太好了。