制作不传递任何信息的活动的标准是什么?

时间:2013-09-25 21:46:57

标签: c# events

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

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

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.

这是标准的方法吗?

1 个答案:

答案 0 :(得分:8)

惯用法是使用EventHandler。如果您有一个或null,则传递给相应的发件人,EventArgs.Empty

我知道这有点疯狂,但这就是惯例。请记住,普通EventArgs中没有有用的信息,因此任何基于 EventHandler的事件基本上都是在说“我可能会收到发件人,但这可能就是全部。”

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

不可否认,这不是世界上最伟大的会议论证 - 但它是一个相当强大的论点。当然,routed events在订阅方式上略有不同,但即使如此,代表也遵循相同的模式。