我只是想确定我理解这一点......
.net 中的“事件”只是委托(delegate)的集合 - 当某个类想要获取“事件”时,它使用“+”运算符和委托(delegate)将指向的方法(观察者的一种)
因此,如果事件发生 => 某个指针将遍历集合并调用在事件注册中定义的方法。
我的描述是否正确? 是否有可能以某种方式看到“事件”对象的 Microsoft .net 实现?
最佳答案
.Net 中没有Event
对象。 .Net 中的事件都基于 MulticastDelegate
s (.Net 中的每个委托(delegate)都是一个 MulticastDelegate
)。
如果您有两个相同类型的委托(delegate),您可以使用 +
运算符组合它们,这不是特定于事件的。
MulticastDelegate
的实现方式是它有一个调用列表,其中包含如果您调用此委托(delegate)将被调用的简单委托(delegate)。可以调用GetInvocationList()
查看在那个代表上。
并且您可以尝试查看 MulticastDelegate
的实现,或者说 EventHandler
在像 Reflector 这样的反编译器中的实现,但是您不会在那里看到太多,仅此而已直接在框架中实现。
如果您想查看处理调用委托(delegate)的代码所在的框架的源代码,您可以尝试 SSCLI ,或者您可以尝试查看 the source code of mono (但这不会向您展示 MS 实现)。
关于c# - .NET 中如何实现 "Event"对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10544101/