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

It'*_*ie. 3 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.
Run Code Online (Sandbox Code Playgroud)

这将是标准的方法吗?

Jon*_*eet 8

惯用的方法就是使用EventHandler.如果您有一个或null其他,请通过适当的发件人,和EventArgs.Empty.

我知道这有点疯狂,但这就是惯例.请记住,普通EventArgs在其中没有有用的信息,所以任何 EventHandler基于事件的事件基本上都在说"我可能会得到一个发送者,但这可能就是全部."

但是,使用C#2中的委托差异,可以获得以下好处:您可以对遵循约定的所有事件使用相同的事件处理方法...因此您可以使用反射来转储日志事件处理程序即使他们在编译时不了解它们,也会给出它们提供的任何信息EventArgs.

诚然,这不是世界上最伟大的会议论证 - 但它是一个相当强大的.当然,路由事件的订阅方式略有不同,但即便如此,代表也遵循相同的模式.