在事件聲明中,是否使用泛型DataEventArgs<TData>
類而不是聲明和使用自定義EventArgs繼承類,這違反了.Net事件「模式」約定?或者在某些情況下認爲不好的做法?好的,使用DataEventArgs <TData>而不是定製的事件數據類?
(該命名約定命名事件參數是使用事件名稱和追加後綴爲「EventArgs的」使用DataEventArgs<TData>
省略了事件名稱,但它表明你發送的數據的類型。)
你也許可以爭辯說,通用的DataEventArgs類對擴展是封閉的,比如添加另一個屬性,除非你可以修改你用於TData的類。
更詳細的解釋:
當聲明,其中包括一些數據我明白,標準事件「模式」的約定是使用通用EventHandler委託正是如此宣佈其標準的代表事件:
public event EventHandler<SomethingHappendEventArgs> SomethingHappend;
其中具體的SomethingHappendEventArgs
被宣佈沿線
public class SomethingHappendEventArgs : EventArgs
{
public SomeDataType Value { get; private set; }
public SomethingHappendEventArgs(SomeDataType data)
{
this.Value = data;
}
}
當用谷歌搜索時,我注意到有幾個Microsoft命名空間提供了一個通用的DataEventArgs類(包括Microsoft.Practices.Prism.Events)。然而,我無處找到任何建議或約定指示何時使用它,而不是像SomethingHappendEventArgs這樣的自定義事件數據類,反之亦然。
所以,只要有一個一塊的數據,我想在事件數據包括,在那裏,我應該使用自定義的事件數據類,像SomethingHappendEventArgs,而不是宣佈這樣的事件的任何原因?
public event EventHandler<DataEventArgs<SomeDataType>> SomethingHappend;
其中通用DataEventArgs
可以像這樣聲明:
public class DataEventArgs<TData> : EventArgs
{
public TData Value { get; private set; }
public DataEventArgs(TData value)
{
this.Value = value;
}
}
除了@妮可的指針有一些事情要考慮列在這個答案:http://stackoverflow.com/questions/129453/net-eventhandlers-generic-or-no/129613#129613 –