在IDiposable类的Dispose方法中从外部事件取消注册是一种好习惯吗?

Gab*_*Roy 9 .net c#

我阅读了解释如何使用Dispose模式的优秀答案,以及它为什么以这种方式工作.

正确使用IDisposable接口

该帖明确指出您希望在两种不同的场景中使用Dispose模式:

  1. 摆脱非托管资源(因为我们必须)
  2. 摆脱托管资源(因为我们想要帮助)

我的问题是:

  • 当一个对象在其整个生命周期中订阅一个外部事件时,在Dispose方法中从该事件中取消注册也是常见/好的做法吗?你会为此目的实现IDisposable接口吗?

SLa*_*aks 7

是的你应该.

这是向您的班级的消费者表明其具有必须发布的"资源"的最佳方式.(即使事件订阅在技术上不是资源)

  • @Blam:当然不是.事件是定期参考; GC从不涉及参考文献. (3认同)
  • 请注意,您不需要这样做,除非事件的所有者将在(可能)大量时间内超过一次性对象.如果它们同时超出范围,则无需取消所有事件. (3认同)