我正在重构的类库有大量事件(超过50个),每个事件都有自己的Delegate,尽管许多事件具有相同的参数。我开始将它们全部更改为使用EventHandler和自定义EventArgs,但这证明是一项繁琐费时的工作。
当你有大量事件需要处理时,有没有更简单的方法?
您不一定需要自己的委托类型 - 您可以使用 EventHandler<TEventArgs>
,其中TEventArgs
是您特定的EventArgs
子类。
重构一个庞大混乱的代码总是耗时且令人烦恼。但如果您改用方法组转换,将来会更容易些:
// This...
foo.SomeEvent += new MyCustomEventHandler(SomeMethod);
// becomes this..
foo.SomeEvent += SomeMethod;
如果SomeEvent
的类型发生变化,您只需更改SomeMethod
,订阅就可以正常工作,而无需再次更改。
是否需要多个不同的EventArgs
子类型是另一回事——如果不了解您的特定情况,就无法确定。如果您需要传递各种各样的信息,这可能确实有意义。
我使用类似下面的模板化事件参数类,以避免创建大量定制的事件参数类。
public class MessageEventArgs<T> : EventArgs
{
public MessageEventArgs(T message)
{
Message = message;
}
public T Message
{
get;
private set;
}
}
MessageEventArgs<T>
,MessageEventArgs<T1, T2>
等等... 除非你在 .NET 4 上使用 MessageEventArgs<Tuple<string,string>>
。那时候,EventHandler<T>
就变得可怕了 ;) - Jon Skeet