实现INotifyPropertyChanged的模式?

Kyl*_*Lib 7 .net inotifypropertychanged

我已经看到用于实现INotifyPropertyChanged的以下模式

private void NotifyPropertyChanged(string propertyName)
{
    PropertyChangedEventHandler handler = PropertyChanged;
    if (handler != null)
    {
        handler(this, new PropertyChangedEventArgs(propertyName));
    }
}

public event PropertyChangedEventHandler PropertyChanged;
Run Code Online (Sandbox Code Playgroud)

有人可以向我解释var handler = PropertyChanged赋值在检查null之前的必要性与直接检查PropertyChanged == null吗?

谢谢

Tho*_*que 4

Eric Lippert 在这篇博客文章中详细解释了这一点:活动和比赛

基本上,这个想法是为了避免竞争条件,以防另一个线程在您检查之后PropertyChanged != null但在您实际调用之前取消订阅此事件的最后一个处理程序PropertyChanged。如果您制作处理程序的本地副本,则不会发生这种情况(但您最终可能会调用刚刚取消订阅的处理程序)