在继承类之前处置基类

本文关键字:基类 继承 | 更新日期: 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() {}
}

这样可以确保资源释放的正确顺序