在继承 class 之前处理基础 class

Disposing base class before inherited class

我有两个 classes:

public abstract class UnitOfWorkBase: IDisposable { }
public sealed class UnitOfWorkSql: UnitOfWorkBase { }

导出class的Dispose方法通常是这样的:

protected override void Dispose (bool disposing)
{
    if (!this.Disposed)
    {
        if (disposing)
        {
            // Managed.
        }

        // Unmanaged.

        this.Disposed = true;
    }

    base.Dispose(disposing);
}

我总是在方法的末尾看到对 base.Dispose(disposing) 的调用。但是,在最近的场景中,需要在派生 class 中的对象之前处理基 class 的对象,如下所示:

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() {}
}

这样您将确保资源释放的正确顺序。