是"对象发件人,EventArgs e"事件处理程序签名只是一个约定

时间:2015-10-14 21:08:31

标签: c# events

声明事件的传统方法是通过从EventArgs扩展来创建自定义args类:

public class SomethingHappenedEventArgs : EventArgs 

然后将该事件和对事件的引用声明为处理程序:

public SomethingHappenedHandler(object sender, SomethingHappenedEventArgs e)

但是,当然,你没有 来做这件事。您的事件处理程序删除可以包含您喜欢的任何方法签名。

那么,"对象,EventArgs"签名只是惯例?它过时了吗?或者我有不清楚的技术优势吗?

1 个答案:

答案 0 :(得分:1)

是公约。

Events Tutorial (C#)

  

虽然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类作为   参数。