c# - .NET 中如何实现 "Event"对象?

标签 c# .net events

我只是想确定我理解这一点......

.net 中的“事件”只是委托(delegate)的集合 - 当某个类想要获取“事件”时,它使用“+”运算符和委托(delegate)将指向的方法(观察者的一种)

因此,如果事件发生 => 某个指针将遍历集合并调用在事件注册中定义的方法。

我的描述是否正确? 是否有可能以某种方式看到“事件”对象的 Microsoft .net 实现?

最佳答案

.Net 中没有Event 对象。 .Net 中的事件都基于 MulticastDelegates (.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/

相关文章:

c# - 线程调用主窗口?

.net - 使用 Nancy + TinyIoC 通过 Quartz JobFactory 注入(inject)依赖项

javascript - 在 Chrome 扩展中使用 JavaScript

java - 为什么这个 shutdownhook 不起作用?

c# - 如何使用 JsonSerializing 序列化特殊字符

c# - while 循环中的 XmlReader IsStartElement 重复上一行

c# - 将 SqlDependency 与命名队列一起使用

c# - 路径操纵(安全漏洞)

c# - 将异常记录到字符串的最佳方法是什么

c# - 用 C# 编写全局自定义事件