为什么存在基本的 EventArgs 类?

7
这是一个更为理论性的问题。我知道在C#中,每个事件都必须有两个参数:对象和事件参数(eventargs)。这一点很清楚。但是,当使用基本的eventargs类时,它甚至无法传递任何数据,那么为什么要存在这个类呢?当然,我可以创建一个继承基本eventargs类的新类,但是我只是不明白这个不能携带任何数据的类的意义所在。

1
一个事件不必须拥有这两个参数,只有一个使用从EventHandler继承的委托处理的事件才需要。 - Rotem
1
@Rotem - 关闭,但委托不会继承。 - H H
该模式是一个库/框架指南。 - H H
1个回答

8
这篇文章讲述的是如何使你的代码具有未来性。其理论依据是,如果你发现你的代码需要发布比之前更多的数据给事件处理程序,那么你只需要向传递给这些事件处理程序的对象中添加更多属性即可。
如果由于某种原因,保存这些数据的类不受你的控制,你可以继承该类,并将你的属性添加到继承的类中。到目前为止,一切都很顺利。
但是,如果你一开始没有将任何对象传递给事件处理程序,则无法在现有代码被破坏的情况下向事件委托中添加新参数。
因此,现在你可以将类似于虚拟对象 EventArgs.Empty 传递给事件,这样您就可以以后从EventArgs派生并开始向相同的事件传递数据,而无需改变事件处理程序。在大多数情况下,甚至不需要重新编译使用事件处理程序的程序集。
因此,EventArgs只是一个方便的类,可用于传递给事件处理程序。你也可以创建自己的类,但是由于它除了作为空闲占位符外没有任何意义,因此没有必要创建自己的类,只需使用EventArgs即可。

好的,我明白了,但我仍然认为没有对象属性或类似的东西很可惜。或者已经准备好了这样的类吗? Translated text: 好的,我明白了,但我仍然认为没有对象属性或类似的东西很可惜。或者已经准备好了这样的类吗? - czubehead
EventArgs 没有意义:通过传递一个类型为 System.Object 的参数,同样可以实现相同的结果。 EventArgs.Empty 也可以是一个虚拟的 System.Object,而不是虚拟的 System.EventArgs。 - Moby Disk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接