调用特定事件的处理程序的顺序取决于该特定事件的实现。例如,使用多案例委托(delegate)的默认后备存储,将按照它们注册的顺序调用处理程序。但是类设计者/实现者可能使用了 add
和 remove
关键字来为事件访问器提供不同的后备存储,因此调用顺序也会不同。
.NET 框架基础库本身是否存在事件文档精确描述其调用顺序的情况?无论是否存在,依赖这种记录在案的订单是否被认为是可接受的做法(例如,对于我自己实现和记录的事件)?为什么或者为什么不?
最佳答案
从来没听说过。这几乎总是以先进先出的方式结束,因为不使用列表并不是很有效。 MulticastDelegate 和 EventHandlerList 就是这样工作的。
依赖秩序是有风险的。在很多情况下,程序员取消订阅事件以防止重入问题,在方法退出时再次订阅它。由于顺序会发生变化,这是不可避免的副作用,他的事件处理程序现在将被最后调用。如果这导致程序失败,那么那个程序员将会困惑很长一段时间。他只是看不到代码更改和错误行为之间的联系,这是一个很难修复的错误。尽管如此,让代码以意想不到的方式交互永远是一个陷阱,只有好的设计才能避免它,只有好的调试器才能诊断它。
关于.net - 记录事件的调用顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17659253/