正确使用 EventArgs

Proper usage of EventArgs

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

public event EventHandler OnAborted;

我需要做的就是调用这个事件,我什至不需要提供任何参数,所以没什么特别的。我对 EventArgs 参数的正确用法感到困惑。

我可以使用:

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

或者我什至可以使用:

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

在这两种情况下,EventArgs 似乎都没什么用,我什至无法提供任何论据(不是我需要,但这不是重点)。

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

使用EventArgs.Empty不会创建新对象并将其分配到堆上。此外,EventArgs.EmptyNull Object Pattern 的一个实例。拥有一个表示“无值”的对象以避免在使用它时检查 null。

要添加更多关于何时应该使用 EventArgs 或正确的 class,这里有一些关于事件设计的 MSDN 指南:

Consider using a derived class of System.EventArgs as the event argument, unless you are absolutely sure the event will never need to carry any data to the event-handling method, in which case you can use the System.EventArgs type directly.

If you define an event that takes an EventArgs instance instead of a derived class that you define, you cannot add data to the event in later versions. For that reason, it is preferable to create an empty derived class of EventArgs. This allows you add data to the event in later versions without introducing breaking changes.