避免大量自定义EventArgs?

时间:2010-05-11 23:17:56

标签: c# .net events

我正在重构的类库有很多事件(超过50个),每个事件都有自己的Delegate,即使很多事件具有相同的参数。我开始将它们全部切换为使用EventHandler和自定义EventArgs,但事实证明它很乏味且耗时。

当您有大量事件时,是否有更简单的方法来处理这种情况?

2 个答案:

答案 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;
    }
}