将自定义非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)
{
....
}