几年前,我读了一本书,描述了如何使用自己的处理器覆盖.NET中的默认事件"调度程序"实现.
class foo { public event EventHandler myEvent; ... } ... myFoo.myEvent += myBar1.EventHandler; myFoo.myEvent += myBar2.EventHandler;
每当事件触发时,都会调用myBar1和myBar2处理程序.
我记得,这个循环的默认实现使用链表,只是迭代列表并按顺序调用EventHandler委托.
我的问题有两个:
有人知道我正在读哪本书吗?
为什么要覆盖默认实现(可能会在本书中回答)?
编辑:我所指的那本书确实是Jeffrey Richter通过C#的CLR
它可能是许多书籍或网络文章之一.
您可能想要更改订阅/取消订阅事件的方式有多种原因:
如果您有许多事件,其中许多可能无法订阅,您可能希望使用EventHandlerList来降低内存使用量
您可能希望记录订阅/取消订阅
您可能希望使用弱引用来避免订户的生命周期与您的生命相关联
您可能希望更改与订阅/取消订阅关联的锁定
我相信还有更多 - 这些都不在我的脑海里:)
编辑:另请注意,使用自定义方式处理订阅/取消订阅和使用自定义方式引发事件(可以调用GetInvocationList并保证所有处理程序都被调用,例如,无论例外情况)之间存在差异.