c# - 为什么存在基本的 EventArgs 类

标签 c# oop events

这是一个更理论化的问题。我知道 C# 中的每个事件都必须有 2 个参数:object 和 eventargs。很明显。但是为什么基本的 eventargs 类在不可能传递任何数据的情况下仍然存在呢?当然我可以创建继承自基本类的新 EventArgs 类,但我只是错过了不能携带任何数据的类的要点。

最佳答案

这是关于面向 future 的代码。

理论认为,如果在某个时候您发现您的代码应该向事件处理程序发布比以前更多的数据,您可以轻松地向传递给这些事件处理程序的对象添加更多属性。

如果出于某种原因,保存这些数据的类不在您的控制之下,您可以继承它,并将您的属性添加到继承的类中。到目前为止一切顺利。

但是,如果您一开始就没有将任何对象传递给事件处理程序,那么您就无法在不破坏现有代码的情况下向事件委托(delegate)添加新参数。

因此,您将等于虚拟对象 EventArgs.Empty 的内容传递给事件,现在让您能够稍后继承 EventArgs 并开始将数据传递给相同的事件,而无需完全改变事件处理程序。在大多数情况下,您甚至不必重新编译使用事件处理程序的程序集。

因此 EventArgs 只是您传递给事件处理程序的一个方便的类,您可以同样轻松地创建自己的类,但是由于它除了作为 future 可能发生的更改的占位符之外没有任何意义,所以没有需要创建自己的,只需使用 EventArgs

关于c# - 为什么存在基本的 EventArgs 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30427840/

相关文章:

c# - NuGet pack 命令如何生成包版本?

java - 我应该使用什么返回语句才能使用针对非整数值引发异常的菜单?

c# - 如何在关闭表单之前验证表单的控件?

c# - Delegatecommand、relaycommand、routedcommand的区别

c# - 为什么有时在查看文件/目录的更改时它没有将标志更改为 true?

c# - 如何在 MySQL 中执行此操作

objective-c - 控制程序执行顺序的技术

c++ - 设计建议 : calling a method on the container object from the contained object

android 添加日历事件在 android 4.0 中崩溃

python - 如何处理按钮点击事件