CLR对事件有什么了解吗?

时间:2014-06-22 16:30:25

标签: .net events delegates clr il

在我看来,事件是CLR上的.NET操作。也就是说,没有'事件' IL中的概念也不是命令,编程语言(如C#)利用委托实现事件的行为(只是对象),从CLR的角度来看,没有事件,只是常规代表机制。 这是真的吗,还是CLR对事件有一些特殊待遇?

3 个答案:

答案 0 :(得分:4)

CLR肯定有意识事件。它们存在于程序集的元数据中,内置于CLR中的Reflection支持公开它们。其调试器接口将事件信息公开给调试器。将[ComVisible] C#声明中声明的事件映射到COM事件接收器接口由CLR内置的CLR Interop支持处理。

但也许这些都可以被视为基础设施支持。海龟一直向下,CLR不直接参与订阅和发射事件,只是代表。这很重要,它需要很快。否则CLR的核心行为,只有在绝对必要时才会涉及。

答案 1 :(得分:2)

你完全正确。

事件只是一对名为add_EventNameremove_EventName的方法。

对它们唯一的CLR意识是反射的EventInfo类的存在,以及支持它的元数据(具体来说,对这些方法和属性的引用)。

答案 2 :(得分:2)

CLR理解事件。它们作为元数据存在于已编译的程序集中。

事件包含一对名为add_EventNameremove_EventName的方法。从实现的角度来看,这些方法与任何其他方法一样被调用。没有用于附加到事件的IL指令。

因此,为了方便开发人员,事件获得的唯一特殊处理是元数据。