是对象发送者,EventArgs "事件处理程序签名只是一种约定

本文关键字:约定 一种 程序 发送者 对象 EventArgs quot 事件处理 | 更新日期: 2023-09-27 18:17:40

声明事件的传统方法是通过扩展EventArgs:

创建自定义args类:
public class SomethingHappenedEventArgs : EventArgs 

然后把它和一个对在处理程序中声明该事件的对象的引用:

public SomethingHappenedHandler(object sender, SomethingHappenedEventArgs e)
但是,当然,你不需要来做这个。你的事件处理程序delete可以有任何你喜欢的方法签名。

那么,"object, EventArgs"签名只是惯例吗?它过时了吗?或者它是否有我不理解的明显的技术优势?

是对象发送者,EventArgs "事件处理程序签名只是一种约定

这是惯例。

事件教程(c#)

尽管c#语言允许事件使用任何委托类型,但是.NET框架对委托类型有更严格的指导应该用于事件。
.NET框架指导方针指出,使用的委托类型为一个事件应该有两个参数,一个是"对象源"参数指示事件的来源,并使用"e"参数表示封装有关事件的任何附加信息。类型参数"e"应该来自EventArgs类。事件不使用任何附加信息,而。net框架有已经定义了一个合适的委托类型:EventHandler。

事件、委托和CLR事件系统约定

按照约定,.NET框架中的事件委托有两个参数表示引发事件的源,由发送方参数,以及事件的数据,由e参数。

不过时

处理和引发事件(。. NET Framework 4.6和4.5)

EventArgs类是所有事件数据类的基类型。EventArgs也是在事件没有任何参数时使用的类与之关联的数据。当你创建一个事件时,它只是有意义的通知其他类发生了不需要通知的事情传递任何数据,包括EventArgs类作为第二个参数委派。你可以传递EventArgs。无数据时为空提供。eventandler委托包括EventArgs类参数。