为什么事件不是C#中的第一类对象

时间:2016-06-29 00:03:00

标签: c#

例如,我知道我无法将事件传递给方法或构造函数,但我不明白为什么我不能。是什么让事件与代表集合不同?

2 个答案:

答案 0 :(得分:6)

  

...虽然事件在表达添加和删除操作的方式上看起来像委托实例,但它们不是。

     

事件是成对的方法,在IL中进行适当的修饰以将它们绑定在一起,让语言知道方法代表事件。这些方法对应于添加和删除操作,每个操作都采用相同类型的委托实例参数(事件的类型)。您对这些操作的处理非常取决于您,但通常的用途是在事件的处理程序列表中添加或删除委托。

来自Jon SkeetC# in Depth: Delegates and Events

答案 1 :(得分:1)

在类中声明一个事件,允许该类外部的对象附加到该事件,并被通知该类中发生的更改。

如果它是一等公民,则该事件可以从外部类调用,这意味着任何提及Button的事件的流氓代码都可以导致Click事件被触发。

要防止此事件具有特殊的访问规则,只允许声明事件(以及甚至不是自己的子类)的类触发事件。

因此,为了这种安全性,事件不是.NET Framework的一等公民。