EventArgs的正确使用方法

4

我有一个非常基础的事件:

public event EventHandler OnAborted;

我只需要调用这个事件,甚至不需要提供任何参数,所以这并不复杂。我对EventArgs参数的正确使用感到困惑。

我可以使用:

if (OnAborted != null)
   OnAborted(this, EventArgs.Empty);

或者我甚至可以使用:

if (OnAborted != null)
   OnAborted(this, new EventArgs());

在这两种情况下,EventArgs 似乎是无用的,我甚至不能提供任何参数(虽然我不需要,但这不是重点)。

什么是 EventArgs 的正确用法?我应该创建一个继承 EventArgs 的自定义类吗?


2
如果您没有传递任何数据,则只需使用 EventArgs.EmptyEventArgs.Empty 相对于 new EventArgs 的优势在于它不会不必要地在堆上分配和创建新对象。 - Dai
@Dai 这个信息很有用,谢谢。除了作为自定义 EventArgs 的基类之外,EventArgs 还有其他用途吗? - Mike Eason
1个回答

2
使用 EventArgs.Empty 不会创建一个新的对象并在堆上分配空间。此外,EventArgs.EmptyNull Object Pattern的一个实例,它代表“没有值”的对象,避免了在使用时检查 null。
关于何时应该使用 EventArgs 或自己的类,以下是一些MSDN关于事件设计的指南:
考虑使用 System.EventArgs 的派生类作为事件参数,除非你确定事件永远不需要传递任何数据到事件处理方法中,在这种情况下,可以直接使用 System.EventArgs 类型。如果定义了一个需要 EventArgs 实例而不是你定义的派生类的事件,你将无法在以后的版本中向事件添加数据。因此,最好创建一个空的 EventArgs 派生类。这样,您可以在以后的版本中向事件添加数据而不会引入破坏性变化。

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