【发布时间】:2013-04-02 14:05:36
【问题描述】:
在事件声明中使用通用 DataEventArgs<TData> 类,而不是声明和使用自定义 EventArgs 继承类,是否违反了 .Net 事件“模式”约定?或者在某些情况下被认为是不好的做法?
(命名事件参数的命名约定是使用事件名称并附加后缀“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;
}
}
【问题讨论】:
-
除了@Nicole 的指针之外,此答案中还列出了一些需要考虑的事项:stackoverflow.com/questions/129453/…
标签: .net events generics event-handling