内置类型的泛型EventArgs
本文关键字:EventArgs 泛型 置类型 内置 | 更新日期: 2023-09-27 18:27:36
现在我们有泛型,并且.NET有内置的EventArgs<T>?建议不要使用通用的EventArgs,至少我有这种感觉。
当我只需要一个内置类型时,使用它是否合理?在我的特定情况下,我通过TCP从流中读取数据,当接收到数据时,会通知订阅者。
public event EventHandler<EventArgs<string>> data_received = delegate { };
...
while (!reader.EndOfStream)
{
if ((data = reader.ReadLine()) != "")
{
this.data_received(this, new EventArgs<string>(data));
}
}
或者,活动不是向订阅者传递数据的最佳方式?
简单回答:这取决于情况。
可以考虑使用类似Tuple<T>
的EventArgs<T>
类来向方法传递数据和从方法返回数据。在一些简单的情况下,对于内部使用,Tuple<T>
是合适的,但对于更复杂的情况或公共表面,使用单独的类型会更合适。
对于EventArgs<T>
,我们或多或少有相同的dilema。对于内部使用来说,使用这种类型是可以的,但对于公共API来说,这可能会导致维护噩梦。
在您的特定情况下,乍一看使用EventArgs<T>
似乎是可以的,但如果以后您决定添加一些附加信息,甚至像EndPoint
一样,该怎么办?在这种情况下,您可以使用EventArgs<T, U>
(如Tuple<T, U>
),也可以切换到自定义EventArgs
类。在这两种情况下,你都会破坏你所有的客户端,如果你只有这个代码的一个客户端,那没关系,但如果不是。。。
最重要的是,对于内部内容,使用EventArgs是可以的,但对于公共表面,我建议使用自定义事件args。
p.S.事件的一般命名约定是CamelCase,在您的特定情况下,这意味着DataReceived
更适合您的事件名称。