我可以使用空条件操作符代替经典的事件引发模式

本文关键字:经典 事件 模式 可以使 条件 操作符 我可以 | 更新日期: 2023-09-27 18:14:10

c# 6.0添加了新的?.操作符,现在允许像这样调用事件:

someEvent?.Invoke(sender, args);

现在,从我读到的,这个操作符保证someEvent被求值一次。使用这种调用而不是经典模式是否正确:

var copy = someEvent
if(copy != null)
  copy(sender, args)

我可以使用空条件操作符代替经典的事件引发模式

参见MSDN上的空条件操作符

有一个例子涵盖了你的问题

没有null条件操作符

var handler = this.PropertyChanged;
if (handler != null)
    handler(…)

与空条件操作符

PropertyChanged?.Invoke(e)

新的方法是线程安全的,因为编译器生成的代码只计算PropertyChanged一次,将结果保存在临时变量中。