.NET EventHandler委托 - 如果它“处理一个没有事件数据的事件”,为什么还有一个“EventArgs”参数?

时间:2013-11-15 20:17:25

标签: c# .net

现在可能我的头脑是一种乱码,但是我对于已经定义的.NET的EventHandler委托的描述有些困难。 documentation表示“表示将处理没有事件数据的事件的方法”。然后,如果我们每次使用它,我们肯定不会传递数据,为什么参数“EventArgs”仍然存在?它的存在使我们每次都必须将EventArgs.Empty传递给它,这非常繁琐。是否有任何特殊原因,或仅仅是为了兼容性和代码灵活性?我是.NET的新手,如果这个问题看起来很天真,那就很抱歉。提前谢谢。

2 个答案:

答案 0 :(得分:3)

它提供:

  • 一致性
  • 编写“通用”事件接收器的能力,因为所有处理程序都有两个参数,第二个参数始终是EventArgs的子类型。与参数逆转(代表支持)一起,具有EventHandler签名的处理程序可以附加到任何事件

    delegate void EventHandler(object sender, EventArgs args)
    
  • 能够在不破坏现有处理程序的情况下向事件添加新数据。现有代码将很乐意使用EventArgs派生对象中可用属性的子集。但是增加参数数量会导致所有现有订户无法编译。

答案 1 :(得分:0)

来自MSDN

  

EventArgs类是所有事件数据类的基本类型。 EventArgs也是当事件没有与之关联的任何数据时使用的类。当您创建一个仅用于通知其他类发生了某些事情并且不需要传递任何数据的事件时,请将EventArgs类作为委托中的第二个参数包含在内。您可以在未提供数据时传递EventArgs.Empty值。 EventHandler委托包含EventArgs类作为参数。

这是基本类型的自然行为。