Implementieren von IDisposable für eine Unterklasse, wenn das übergeordnete Element IDisposable ebenfalls implementiert

Ich habe eine Eltern und Kind-Klasse, die beide implementiert werden müssen IDisposable. Wo sollte virtual (und base.Dispose()?) Anrufe ins Spiel kommen? Wenn ich nur das überschreiben der Dispose(bool disposing) nennen, es fühlt sich wirklich seltsam, die besagt, dass ich implementieren IDisposable ohne eine explizite Dispose() - Funktion (nur unter Verwendung der geerbt), aber alles andere.

Was ich getan hatte (verharmlost ganz ein bisschen):

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);
    }

}

InformationsquelleAutor der Frage Tanzelax | 2010-03-22

Schreibe einen Kommentar