声明

时间:2017-10-17 17:38:44

标签: c#

以下初始化有什么作用?我不理解delegate { }部分。

public event EventHandler Updated = delegate { };

3 个答案:

答案 0 :(得分:1)

这将创建一个带有空体的新anonymous method并将其附加到事件中。它是一个默认的事件处理程序,它不做任何事情。

答案 1 :(得分:0)

它使事件处理程序执行一个空代码块。通常它会被赋值为null,但是在激活代码中你需要检查处理程序是否为null。有些人认为这会使代码更清晰

答案 2 :(得分:0)

这里发生了一些事情,由语言结构提供。让我们分解一下:

首先,您正在创建一个公共事件:

public event EventHandler Updated;

然后,您将其初始化为"默认处理程序":

public event EventHandler Updated = xxx;

xxx 应该是 EventHandler类型的处理程序。这是那个人的签名:

public delegate void EventHandler(object sender, EventArgs e);

任何希望订阅该活动的人都应该遵守该签名。

由于一些奇怪的原因,我不知道,编译器允许你提供一个默认的实现(属性初始化程序),符合预期的签名(???):

public event EventHandler Updated = delegate { };

注意没有参数。这就是签名应该是什么(它编译得很好):

public event EventHandler Updated = delegate(object sender, EventArgs e){  };

然后您可以访问代码中的那些对象。

因此,实际上,您提供了一个默认的内联委托方法,该方法将在您触发Updated事件时执行。这个代表当然没有说明(空块)。你可以稍微改一下来测试一下:

public event EventHandler Updated = delegate { Console.Writeline("It fired!"); };

如果有人知道允许这种类型的无参数委托的理由并且可以增加这个答案,那就太棒了。