Implementando IDisposable en una subclase cuando el padre también implementa IDisposable

Tengo una clase para padres e hijos que ambos necesitan implementarIDisposable. Donde deberiamosvirtual (ybase.Dispose()?) entran en juego las llamadas? Cuando acabo de anular elDispose(bool disposing) llamada, se siente realmente extraño decir que implementoIDisposable sin tener un explícitoDispose() función (solo utilizando el heredado), pero teniendo todo lo demás.

Lo que había estado haciendo (trivializado bastante):

internal class FooBase : IDisposable
{
    Socket baseSocket;

    private void SendNormalShutdown() { }

    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }

    private bool _disposed = false;
    protected virtual void Dispose(bool disposing)
    {
        if (!_disposed)
        {
            if (disposing)
            {
                SendNormalShutdown();
            }
            baseSocket.Close();
        }
    }

    ~FooBase()
    {
        Dispose(false);
    }
}

internal class Foo : FooBase, IDisposable
{
    Socket extraSocket;

    private bool _disposed = false;
    protected override void Dispose(bool disposing)
    {
        if (!_disposed)
        {
            extraSocket.Close();
        }
        base.Dispose(disposing);
    }

    ~Foo()
    {
        Dispose(false);
    }

}

Respuestas a la pregunta(5)

Su respuesta a la pregunta