这个问题可能会导致猜测性的答案,但我认为event
在c#的实现背后有一个深思熟虑的设计决策.
只要事件的发布者处于活动状态,c#中的事件模式就会使订阅者保持活动状态.因此,如果你没有取消订阅,你就会泄漏内存(好吧,并没有真正泄漏 - 但内存仍然不必要地占用).
如果我想阻止这种情况,我可以取消订阅事件或实现MSDN中提出的弱事件模式.
由于事件模式导致了很多问题(对于初学者?),问题是:为什么决定发布者保留对订阅者的强引用,而不是让它们独立或允许开发人员明确拥有strong
或weak
修饰符?
关于这个主题已经有了几个问题,答案听起来很合理,但没有一个真正回答为什么会这样.