如何在.NET中实现"事件"对象?

Yan*_*hof 3 .net c# events

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

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

因此,如果事件发生=>某些指针将在集合上行走,并将调用在事件注册中定义的方法.

我对这个描述是对的吗?是否有可能以某种方式看到'Event'对象的Microsoft .net实现?

svi*_*ick 5

Event.Net中没有对象..Net中的事件都是基于MulticastDelegates(并且.Net中的每个代表都是a MulticastDelegate).

如果您有两个相同类型的委托,则可以使用+运算符组合它们,这不是特定于事件的.

MulticastDelegate实现的方式是它有一个调用列表,其中包含在调用此委托时将调用的简单委托.您可以通过调用GetInvocationList()该委托来查看它.

你可以尝试寻找的执行MulticastDelegate,或者说,EventHandler像反射反编译器,但你不会看到太多在那里,这一切都在框架直接实现.

如果你想查看框架的源代码,其中处理调用委托的代码存在,你可以尝试SSCLI,或者你可以尝试查看mono的源代码(但这不会向你显示MS实现).

  • 它的管理部分,是的; MultiCastDelegate位于`RefSrc\Source\.Net\4.0\DEVDIV_TFS\Dev10\Releases\RTMRel \ndp\clr\src\BCL\System` (2认同)