gpt4 book ai didi

c# - 内置类型的通用 EventArgs

转载 作者:太空狗 更新时间:2023-10-29 23:17:02 25 4
gpt4 key购买 nike

海报在 Are EventArg classes needed now that we have genericsDoes .NET have a built-in 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));
}
}

或者事件不是将数据传递给订阅者的最佳方式?

最佳答案

简短回答:视情况而定。

可以考虑EventArgs<T>Tuple<T>用于向/从方法传递和返回数据。在一些简单的情况下和内部使用 Tuple<T>是合适的,但对于更复杂的情况或公共(public)表面,使用单独的类型会更合适。

EventArgs<T>我们或多或少有同样的困境。对于内部使用,可以使用这种类型,但对于公共(public) API,它可能会导致维护噩梦。

在您的特定情况下,似乎可以使用 EventArgs<T>乍一看,但如果稍后您决定向其中添加一些附加信息,甚至像 EndPoint 会怎么样? ?在这种情况下,您可以使用 EventArgs<T, U> (如 Tuple<T, U> )或者您可以切换到自定义 EventArgs类(class)。在这两种情况下,您都会破坏所有客户,如果您只有此代码的一个客户 - 没关系,但如果不是......

最重要的是,对于内部内容,可以使用 EventArgs,但对于公共(public)表面,我建议使用自定义事件参数。

附言事件的一般命名约定是 CamelCase,在您的特定情况下,这意味着 DataReceived是更适合您的事件的名称。

关于c# - 内置类型的通用 EventArgs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9654718/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com