我可以使用空条件操作符代替经典的事件引发模式
本文关键字:经典 事件 模式 可以使 条件 操作符 我可以 | 更新日期: 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一次,将结果保存在临时变量中。