来自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;
答案 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开发人员提供他们决定的解释,那就太好了。