gpt4 book ai didi

C# INotifyPropertyChanged 处理程序

转载 作者:行者123 更新时间:2023-11-30 18:56:28 25 4
gpt4 key购买 nike

我开始阅读有关 MVVM 的内容,我经常看到的一种模式是:

public event PropertyChangedEventHandler PropertyChanged;
//.....

PropertyChangedEventHandler handler = this.PropertyChanged;
if (handler != null)
{
var e = new PropertyChangedEventArgs(propertyName);
handler(this, e);
}

为什么要声明这个 handler 变量?在我看来,它只是不必要地使代码复杂化,但我什至可以在 Microsoft 自己的教程中看到这一点,为什么不将其用作:

if (this.PropertyChanged != null)
{
var e = new PropertyChangedEventArgs(propertyName);
this.PropertyChanged(this, e);
}

最佳答案

关闭 PropertyChanged 事件是为了线程安全。事实上,从技术上讲,您应该对所有您的事件执行此操作。

赋值会创建事件及其处理程序的副本(不是引用,这将毫无用处),这意味着您可以避免事件处理程序在传递后立即设置为 null 的情况null 检查。这避免了会引发 NullReferenceException 的潜在竞争条件。

实际上,UI 并不经常将该属性设置为 null(如果有的话)。但是,为了安全起见并采用良好做法,您应该关闭处理程序。

关于C# INotifyPropertyChanged 处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27805397/

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