有人可以解释下面delegate{ }
public event EventHandler CanExecuteChanged = delegate { };
另外,为什么它不需要对CanExecuteChanged进行空引用检查,以及使用它的潜在性能命中率(如果有的话)。
答案 0 :(得分:6)
这是无参数委托的sentinel值。它代表了一种无效的匿名方法。
它消除了对null
- 检查的需要,因为您可以在不触发空引用异常的情况下调用此类委托。
注意:此技巧在C#6.0中的相关性较低,因为该语言为调用可能为null
的代理提供了另一种语法:
delegateThatCouldBeNull?.Invoke(this, value);
在上面,null条件运算符?.
将空检查与条件调用结合起来。
答案 1 :(得分:3)
这里delegate { }
是一个Anonymous method block
,它将作为连接事件的事件处理程序。您可以在此处编写必要的事件处理逻辑。示例如下:
public event EventHandler CanExecuteChanged = delegate {
Console.WriteLine("CanExecuteChanged Event has been fired"); };
答案 2 :(得分:2)
delegate {}
是anonymous method,身体空白。这是一种什么都不做的方法。 CanExecuteChanged
事件将始终为其分配一个委托,因此它永远不会为空。
唯一的缺点是你已经创建了一个新的委托实例,它将存在于内存中。