声明中的事件初始化
答
这里发生了一些事情,礼貌的语言结构。让我们来分析一下:
首先,您要创建一个公共事件:
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!"); };
如果有人知道允许这种类型参数的代表的理由,并可以增加这个答案这将是巨大的。
答
它使事件处理程序执行一个空的代码块。通常它会被分配为null,但是在触发代码中,您需要检查处理程序是否为null。有人认为这使得代码更清洁
+0
我不同意它使代码更清洁。检查null非常简单,只需调用“?”。 –
这是一个“匿名”的功能,它什么都不做。 –
你对'delegate'关键词做了哪些研究,你发现了什么,以及它如何回答你的问题? – Servy