例如,我知道我无法将事件传递给方法或构造函数,但我不明白为什么我不能。是什么让事件与代表集合不同?
答案 0 :(得分:6)
...虽然事件在表达添加和删除操作的方式上看起来像委托实例,但它们不是。
事件是成对的方法,在IL中进行适当的修饰以将它们绑定在一起,让语言知道方法代表事件。这些方法对应于添加和删除操作,每个操作都采用相同类型的委托实例参数(事件的类型)。您对这些操作的处理非常取决于您,但通常的用途是在事件的处理程序列表中添加或删除委托。
答案 1 :(得分:1)
在类中声明一个事件,允许该类外部的对象附加到该事件,并被通知该类中发生的更改。
如果它是一等公民,则该事件可以从外部类调用,这意味着任何提及Button
的事件的流氓代码都可以导致Click
事件被触发。
要防止此事件具有特殊的访问规则,只允许声明事件(以及甚至不是自己的子类)的类触发事件。
因此,为了这种安全性,事件不是.NET Framework的一等公民。