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

前端之家收集整理的这篇文章主要介绍了c# – 事件 – 处理程序与直接访问?为什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
样品代码
  1. public event PropertyChangedEventHandler PropertyChanged;
  2. private void OnPropertyChanged(String propertyName)
  3. {
  4. PropertyChangedEventHandler handler = PropertyChanged;
  5. if (handler != null)
  6. {
  7. handler(this,new PropertyChangedEventArgs(propertyName));
  8. }
  9. }

VS:

  1. public event PropertyChangedEventHandler PropertyChanged;
  2. private void OnPropertyChanged(String propertyName)
  3. {
  4. if (PropertyChanged!= null)
  5. {
  6. PropertyChanged(this,new PropertyChangedEventArgs(propertyName));
  7. }
  8. }

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

解决方法

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

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

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

猜你在找的C#相关文章