【发布时间】:2016-06-29 00:02:59
【问题描述】:
例如,我知道我不能将事件传递给方法或构造函数,但我不明白为什么不能。是什么让事件与代表集合不同?
【问题讨论】:
-
@cFrozenDeath 我确定我不明白什么是事件。如果我这样做了,我就不会问这个问题了。
-
为了未来的读者,您能否添加一段演示此行为的 sn-p 代码?
标签: c#
例如,我知道我不能将事件传递给方法或构造函数,但我不明白为什么不能。是什么让事件与代表集合不同?
【问题讨论】:
标签: c#
...虽然事件在您表达添加和删除操作的方式方面看起来像委托实例,但它们不是。
事件是成对的方法,在 IL 中适当地修饰以将它们联系在一起并让语言知道方法代表事件。这些方法对应于添加和删除操作,每个操作都采用相同类型(事件的类型)的委托实例参数。你对这些操作做什么几乎取决于你,但典型的用途是在事件的处理程序列表中添加或删除委托。
【讨论】:
在一个类中声明一个事件,以允许该类外部的对象附加到该事件并在该类中发生更改时得到通知。
如果它是一等公民,那么事件可以从外部类调用,这意味着任何引用该事件的流氓代码,例如Button,都可能导致Click 要触发的事件。
为了防止这种事件有特殊的访问规则,只允许声明事件的类(并且甚至不允许它自己的子类)触发事件。
因此,为了安全起见,事件不是 .NET Framework 的一等公民。
【讨论】: