我正在重構的類庫有大量事件(超過50個),每個事件都有自己的Delegate,儘管許多事件具有相同的參數。我開始將它們全部切換到使用EventHandler和自定義EventArgs,但它被證明是乏味和耗時的。避免大量的自定義EventArgs?
當您有大量事件時,是否有更簡單的方法來處理這種情況?
我正在重構的類庫有大量事件(超過50個),每個事件都有自己的Delegate,儘管許多事件具有相同的參數。我開始將它們全部切換到使用EventHandler和自定義EventArgs,但它被證明是乏味和耗時的。避免大量的自定義EventArgs?
當您有大量事件時,是否有更簡單的方法來處理這種情況?
您當然不需要您自己的代表類型 - 您可以使用EventHandler<TEventArgs>
其中TEventArgs
是您的具體EventArgs
子類。
重構一個大混亂總是耗時和煩人。如果您在使用方法組轉換改變它可以使其在未來雖然簡單:
// This...
foo.SomeEvent += new MyCustomEventHandler(SomeMethod);
// becomes this..
foo.SomeEvent += SomeMethod;
然後如果SomeEvent
變化的類型,你可以改變SomeMethod
及認購將只是工作,而不必再次更改。
是否需要幾個不同的EventArgs
亞型是一個不同的問題 - 不知道你的具體情況不可能說。如果你需要傳遞各種各樣的信息,它可能確實有道理。
我使用類似下面的templatized事件args類來避免必須創建大量的自定義事件參數類。
public class MessageEventArgs<T> : EventArgs
{
public MessageEventArgs(T message)
{
Message = message;
}
public T Message
{
get;
private set;
}
}
我正在考慮這個問題,但感覺它失去了事件arg的所需*含義 - 因爲這個值只是「消息」而不是「UserID」,「ErrorCode」或其他。 (它確實可能實現問題中陳述的目標 - 當然我不確定它是否是一種很好的實現方式)。每個元素都需要一個泛型類型 - 即'MessageEventArgs
謝謝,我想我只需要仔細看看所有這些代表。 – 2010-05-12 01:52:05