每次我深入开始一个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这样的花哨工具......任何人都有任何与此有关的想法?