3

我有一个事件,实际上只是让用户知道发生了什么事。他们必须手动对该事件采取行动,因为没有数据从中传递。

但是,我不确定什么会更惯用:

public event Action MyEvent;
//clearly says no arguments
public event EventHandler MyEvent;
//uses the EventHandler class to no effect, but might be more idiomatic.
public event Action<object> MyEvent;
//just like the first but passes the sender if needed.

这将是执行此操作的标准方法?

4

1 回答 1

8

惯用的方法是只使用EventHandler. 如果您有一个或其他的,请传入一个适当的发件人null,并且EventArgs.Empty.

我知道这有点疯狂,但这是惯例。请记住,plainEventArgs中没有有用的信息,因此任何 EventHandler基于 - 的事件基本上都是在说“我可能会收到一个发件人,但可能仅此而已”。

但是,由于 C# 2 的委托差异,这样做有一个好处:您可以对遵循约定的所有事件使用相同的事件处理方法......因此您可以拥有(比如说)使用反射转储的日志事件处理程序给出的任何信息EventArgs,即使他们在编译时不知道。

诚然,这不是世界上最大的公约论据——但它是一个相当有力的论据。当然,路由事件在订阅方式上略有不同,但即便如此,委托也遵循相同的模式。

于 2013-09-25T21:48:30.553 回答