我正在重构的类库有很多事件(超过50个),每个事件都有自己的Delegate,即使很多事件具有相同的参数。我开始将它们全部切换为使用EventHandler和自定义EventArgs,但事实证明它很乏味且耗时。
当您有大量事件时,是否有更简单的方法来处理这种情况?
答案 0 :(得分:6)
您当然不需要自己的委托类型 - 您可以使用EventHandler<TEventArgs>
TEventArgs
是您特定的EventArgs
子类。
重构一个大混乱总是耗时且令人讨厌。如果您更改为使用方法组转换,则可以在将来更轻松地使用它:
// This...
foo.SomeEvent += new MyCustomEventHandler(SomeMethod);
// becomes this..
foo.SomeEvent += SomeMethod;
然后,如果SomeEvent
的类型发生变化,您可以更改SomeMethod
,订阅就可以正常运行,而无需再次更改。
您是否需要多个不同的EventArgs
子类型是另一回事 - 如果不了解您的具体情况,也无法说出来。如果你需要传递各种各样的信息,它可能确实有意义。
答案 1 :(得分:2)
我使用如下所示的模板化事件args类,以避免创建大量自定义事件args类。
public class MessageEventArgs<T> : EventArgs
{
public MessageEventArgs(T message)
{
Message = message;
}
public T Message
{
get;
private set;
}
}