gpt4 book ai didi

c# - PropertyChangedEventHandler 是如何工作的?

转载 作者:可可西里 更新时间:2023-11-01 07:49:10 30 4
gpt4 key购买 nike

这是一个非常简单的问题,但我想知道是否有人可以解释第 4 行实际上在做什么?所以第一行给处理程序一个事件。我真的不知道在什么情况下处理程序会返回 null 或最后一行的作用。

当您将对象和更改的属性传递给处理程序时,它对它们做了什么?

PropertyChangedEventHandler handler = PropertyChanged; //property changed is the event

if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}

我想我是用它来得到这个 code但我想充分了解它在做什么。

最佳答案

如果你刚刚做了:

PropertyChanged(this, new PropertyChangedEventArgs(name))

如果没有人订阅事件 PropertyChanged,您将得到一个 NullReferenceException。为了解决这个问题,您添加了一个空检查:

if(PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(name))
}

现在,如果您使用多线程,有人可以在空检查和事件调用之间取消订阅,因此您仍然可以获得 NullReferenceException。为了处理这个问题,我们将事件处理程序复制到一个临时变量

  PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}

现在,如果有人取消订阅该事件,我们的临时变量 handler 仍将指向旧函数,并且这段代码现在无法抛出 NullReferenceException

大多数时候你会看到人们使用关键字 var 来代替,这样你就不需要输入临时变量的完整类型,这是你最常看到的形式通常在代码中。

  var handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}

关于c# - PropertyChangedEventHandler 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17736571/

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