gpt4 book ai didi

c# - 为什么我们不直接调用事件?

转载 作者:行者123 更新时间:2023-11-30 13:48:42 25 4
gpt4 key购买 nike

我见过许多开发人员在想要调用一个 Event 时,他们将其分配给一个名为 handler 的局部变量并调用 handler 而不是直接调用 Event。为什么我们不直接调用事件?

private void OnSomethingChanged(EventArgs e)
{
if (SomethingEvent != null)
{
SomethingEvent(this, e);
}
}

最佳答案

基本上,您发布的代码不是线程安全的。如果最终订阅者在 if 之后 在不同的线程中取消订阅检查但是调用之前,你会得到一个NullReferenceException .

一种选择是编写一个扩展方法:

public static void NullSafeInvoke(this EventHandler handler,
object sender, EventArgs e)
{
if (handler != null)
{
handler(this, e);
}
}

然后你可以写:

private void OnSomethingChanged(EventArgs e)
{
SomethingEvent.NullSafeInvoke(this, e);
}

您可能需要对 EventHandler<T> 进行另一个重载,也是。

关于c# - 为什么我们不直接调用事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11729639/

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