声明事件的传统方法是通过从EventArgs扩展来创建自定义args类:
public class SomethingHappenedEventArgs : EventArgs
然后将该事件和对事件的引用声明为处理程序:
public SomethingHappenedHandler(object sender, SomethingHappenedEventArgs e)
但是,当然,你没有 来做这件事。您的事件处理程序删除可以包含您喜欢的任何方法签名。
那么,"对象,EventArgs"签名只是惯例?它过时了吗?或者我有不清楚的技术优势吗?
答案 0 :(得分:1)
是公约。
虽然C#语言允许事件使用任何委托类型,但是 .NET Framework对委托类型有一些更严格的指导 应该用于事件。
.NET Framework准则指出用于的委托类型 一个事件应该带两个参数,一个“对象源”参数 指示事件的来源,以及“e”参数 封装有关该事件的任何其他信息。的类型 “e”参数应该来自EventArgs类。对于活动 .NET Framework没有使用任何其他信息 已经定义了一个合适的委托类型:EventHandler。
Events, Delegates, and CLR Event System Conventions
按照惯例,.NET Framework中的事件委托有两个 参数,引发事件的源,由 发送者参数,以及由e表示的事件数据 参数。
它没有过时。
Handling and Raising Events (.NET Framework 4.6 and 4.5)
EventArgs类是所有事件数据类的基本类型。 EventArgs也是您在事件没有任何时使用的类 与之相关的数据。当您创建仅仅意味着的事件时 通知其他课程发生了什么事情并且不需要 传递任何数据,包括EventArgs类作为第二个参数 代表。没有数据时,您可以传递EventArgs.Empty值 提供。 EventHandler委托包含EventArgs类作为 参数。