自定义事件处理程序



将自定义非EventArgs类传递给EventHandler是否是一种好的做法,例如:

public event EventHandler<FooBar> FooBarCreated;

而不是

public event EventHandler<FooBarCreatedEventArgs> FooBarCreated;
public class FooBarCreatedEventArgs : EventArgs 
{
...
public FooBar FooBar { get; }
}

前者更短,但我似乎在微软的文档中看到了后者。后者是正确的方式吗?

更新的.NET核心事件模式文档页面说明如下:

上一篇文章讨论了最常见的事件模式。NET Core有一个更轻松的模式。在此版本中,EventHandler定义不再具有TEventArgs必须是从System.EventArgs.派生的类的约束

请注意,如果您的类被设计为将数据传递给事件订阅者,那么您仍然应该遵循命名约定并添加Args后缀(如果您从EventArgs派生,则添加EventArgs后缀(。

但是,如果要传递给事件订阅者的所有数据都是您已经拥有的类,则可以选择不仅为事件参数创建特定的类。

是的,后者是首选,因为它可以提供更具描述性的回调方法签名。例如

class FooBarEventObserver
{
public void OnCreated(object sender, FooBarCreatedEventArgs args)
{
....
}

最新更新