派生类无自有待释放资源时是否需要重写基类的Dispose方法
派生类无自有释放资源时无需重写
Dispose方法 核心结论
如果你的Derived派生类没有任何需要自行释放的托管/非托管资源,不需要重写基类的Dispose相关方法。
原因解释
遵循.NET规范实现了IDisposable接口的Base基类,都会采用标准的Dispose模式设计:
- 基类公开的无参
Dispose()方法通常不会标记为虚方法,内部会调用受保护的虚方法Dispose(bool disposing),同时执行GC.SuppressFinalize(this)跳过对象的析构逻辑 - 受保护的
virtual Dispose(bool disposing)是专门留给派生类扩展释放逻辑的入口,仅当派生类存在自有资源需要释放时才需要重写该方法
只要基类的Dispose模式实现符合规范,你不在派生类重写任何Dispose逻辑时,基类的资源释放流程会完全正常执行,不会出现资源泄漏问题。
补充注意事项
- 如果基类没有遵循标准Dispose模式,直接将无参
Dispose()标记为虚方法,你也不需要额外重写,默认继承的基类Dispose实现已经能完成所有需要的释放操作 - 无论是否重写Dispose方法,使用派生类实例时都遵循普通IDisposable对象的使用规范即可:优先用
using代码块自动释放,特殊场景下手动调用Dispose()方法
内容的提问来源于stack exchange,提问作者kofifus
相关产品推荐
相关产品推荐

