C# · 12月 26, 2021

c# – 事件 – 处理程序与直接访问?为什么?

样品代码: public event PropertyChangedEventHandler PropertyChanged;private void OnPropertyChanged(String propertyName) { PropertyChangedEventHandler handler = PropertyChanged; if (handler != null) { handler(this,new PropertyChangedEventArgs(propertyName)); }}

VS:

public event PropertyChangedEventHandler PropertyChanged;private void OnPropertyChanged(String propertyName) { if (PropertyChanged!= null) { PropertyChanged(this,new PropertyChangedEventArgs(propertyName)); }}

为什么我总是看到人们创建将PropertyChanged分配给“处理程序”而不是仅仅使用它?

解决方法 如果你做的更简单一些,并且不同的线程从你的if中的事件中删除最后一个处理程序,你将得到一个null引用. (代表是不可变的)

通过临时处理一个处理程序,您可以防止这种情况,因为您只检查一次该字段.

如果事件永远不会从多线程取消订阅,则不需要临时的.