相关疑难解决方法(0)

.NET EventHandlers - 通用还是不通用?

每次我深入开始一个C#项目时,我最终都会遇到许多事件,这些事件实际上只需要传递一个项目.我坚持EventHandler/ EventArgs练习,但我喜欢做的事情是这样的:

public delegate void EventHandler<T>(object src, EventArgs<T> args);

public class EventArgs<T>: EventArgs {

  private T item;

  public EventArgs(T item) {
    this.item = item;
  }

  public T Item {
    get { return item; }
  }
}
Run Code Online (Sandbox Code Playgroud)

后来,我可以拥有我的

public event EventHandler<Foo> FooChanged;

public event EventHandler<Bar> BarChanged;
Run Code Online (Sandbox Code Playgroud)

但是,似乎.NET的标准是EventArgs为每种类型的事件创建一个新的委托和子类.我的通用方法有问题吗?


编辑:这篇文章的原因是我刚刚在一个新项目中重新创建了它,并希望确保它没问题.实际上,我在发布时正在重新创建它.我发现有一个泛型EventHandler<TEventArgs>,所以你不需要创建泛型委托,但是你仍然需要泛型EventArgs<T>类,因为TEventArgs: EventArgs.
另一个编辑:内置解决方案的一个缺点(对我而言)是额外的冗长:

public event EventHandler<EventArgs<Foo>> FooChanged;
Run Code Online (Sandbox Code Playgroud)

public event EventHandler<Foo> FooChanged;
Run Code Online (Sandbox Code Playgroud)

但是客户注册你的事件可能会很麻烦,因为系统命名空间是默认导入的,因此他们必须手动寻找你的命名空间,即使使用像Resharper这样的花哨工具......任何人都有任何与此有关的想法?

.net c# generics events

21
推荐指数
3
解决办法
2万
查看次数

标签 统计

.net ×1

c# ×1

events ×1

generics ×1