记录事件的调用顺序

Hap*_*mad 4 .net event-handling

调用特定事件的处理程序的顺序取决于该特定事件的实现。例如,使用多案例委托的默认后备存储,处理程序将按照它们注册的顺序被调用。但是类设计者/实现者可能使用addremove关键字来为事件访问器提供不同的后备存储,因此调用顺序也会不同。

.NET 框架基础库本身是否存在事件文档准确描述其调用顺序的情况?无论是否存在,依赖于此类记录的命令是否被认为是可接受的做法(例如,对于我自己实施和记录的事件)?为什么或者为什么不?

Han*_*ant 5

从来没听说过。这几乎总是以先进先出结束,因为不使用列表效率不高。MulticastDelegate 和 EventHandlerList 以这种方式工作。

依赖秩序是有风险的。在很多情况下,程序员会取消订阅事件以防止重入问题,并在方法退出时再次订阅该事件。由于顺序会改变不可避免的副作用,他的事件处理程序现在将被最后调用。如果这导致程序失败,那么程序员将会困惑很长一段时间。他只是看不到代码更改和不当行为之间的联系,这是一个很难修复的错误。尽管如此,让代码以意想不到的方式交互永远是一个陷阱,只有好的设计才能避免它,只有好的调试器才能诊断它。