在继承类之前处置基类
本文关键字:基类 继承 | 更新日期: 2023-09-27 18:02:29
我有两个类:
public abstract class UnitOfWorkBase: IDisposable { }
public sealed class UnitOfWorkSql: UnitOfWorkBase { }
派生类的Dispose
方法通常是这样的:
protected override void Dispose (bool disposing)
{
if (!this.Disposed)
{
if (disposing)
{
// Managed.
}
// Unmanaged.
this.Disposed = true;
}
base.Dispose(disposing);
}
我总是在方法的末尾看到对base.Dispose(disposing)
的调用。然而,在最近的一个场景中,需要在派生类中的对象之前处置基类的对象,如下所示:
protected override void Dispose (bool disposing)
{
base.Dispose(disposing);
if (!this.Disposed)
{
if (disposing)
{
// Managed.
}
// Unmanaged.
this.Disposed = true;
}
}
我不确定这是否被认为是不好的做法。有什么需要注意的吗?
我认为你应该打破常规。而不是:
class BaseClass
{
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
//dispose my resources
}
}
}
写如下:
class BaseClass
{
private void Dispose(bool disposing)
{
if (disposing)
{
//dispose my resources
DisposeManagedOverride();
}
CloseUnmanagedOverride();
}
protected virtual void DisposeManagedOverride() {}
protected virtual void CloseUnmanagedOverride() {}
}
这样可以确保资源释放的正确顺序