正在使用通用的DataEventArgs<TData>
类,而不是在事件声明中声明和使用自定义的 EventArgs 继承类,这违反了 .Net 事件“模式”约定吗?或者在某些情况下被认为是不好的做法?
(The naming命名事件参数的约定是使用事件名称并附加后缀“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)的建议或约定指示,反之亦然。
所以,只要有one我想包含在事件数据中的数据,是否有任何原因我应该使用自定义事件数据类(例如 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;
}
}