delegate {}是什么意思

时间:2015-08-10 18:04:47

标签: c# delegates

有人可以解释下面delegate{ }

的含义
public event EventHandler CanExecuteChanged = delegate { };

另外,为什么它不需要对CanExecuteChanged进行空引用检查,以及使用它的潜在性能命中率(如果有的话)。

3 个答案:

答案 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事件将始终为其分配一个委托,因此它永远不会为空。

唯一的缺点是你已经创建了一个新的委托实例,它将存在于内存中。

相关问题