2010-05-11 66 views
4

我正在重構的類庫有大量事件(超過50個),每個事件都有自己的Delegate,儘管許多事件具有相同的參數。我開始將它們全部切換到使用EventHandler和自定義EventArgs,但它被證明是乏味和耗時的。避免大量的自定義EventArgs?

當您有大量事件時,是否有更簡單的方法來處理這種情況?

回答

6

您當然不需要您自己的代表類型 - 您可以使用EventHandler<TEventArgs>其中TEventArgs是您的具體EventArgs子類。

重構一個大混亂總是耗時和煩人。如果您在使用方法組轉換改變它可以使其在未來雖然簡單:

// This... 
foo.SomeEvent += new MyCustomEventHandler(SomeMethod); 

// becomes this.. 
foo.SomeEvent += SomeMethod; 

然後如果SomeEvent變化的類型,你可以改變SomeMethod及認購將只是工作,而不必再次更改。

是否需要幾個不同的EventArgs亞型是一個不同的問題 - 不知道你的具體情況不可能說。如果你需要傳遞各種各樣的信息,它可能確實有道理。

+0

謝謝,我想我只需要仔細看看所有這些代表。 – 2010-05-12 01:52:05

2

我使用類似下面的templatized事件args類來避免必須創建大量的自定義事件參數類。

public class MessageEventArgs<T> : EventArgs 
{ 
    public MessageEventArgs(T message) 
    { 
     Message = message; 
    } 

    public T Message 
    { 
     get; 
     private set; 
    } 
} 
+0

我正在考慮這個問題,但感覺它失去了事件arg的所需*含義 - 因爲這個值只是「消息」而不是「UserID」,「ErrorCode」或其他。 (它確實可能實現問題中陳述的目標 - 當然我不確定它是否是一種很好的實現方式)。每個元素都需要一個泛型類型 - 即'MessageEventArgs ', 'MessageEventArgs '等等......除非你在.NET 4上使用'MessageEventArgs >'。那時'EventHandler '變得可怕了;) – 2010-05-11 23:28:48