Erstellen eine IDisposable-Klassen in c#, die bereinigt, die eine SqlConnection-Instanz, wenn Sie fertig sind mit

In einer Antwort auf eine Vorherige Frage jemand empfohlen:

haben Sie die SqlConnection-eine member-variable der Klasse, sondern die Klasse IDisposable und entsorgen Sie die SqlConnection-wenn die Klasse entsorgt

Ich haben zusammen eine Umsetzung dieser Anregung (unten), aber wollte überprüfen, dass diese Implementierung korrekt ist (offensichtlich ist es derzeit nicht tun, alles, außer die Verbindung, aber die Idee ist, dass es Methoden gibt, die möchten, verwenden Sie die Verbindung und die wäre in der Lage, die auf Sie angewiesen vorhandenen und offen).

public class DatabaseRecord : IDisposable
{
    protected SqlConnection connection;

    public DatabaseRecord()
    {
        connection = new SqlConnection("ConnectionString");
        connection.Open();
    }

    //IDisposable implementation

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


    private void Dispose(bool disposing)
    {
        if (!this.disposed)
        {
            if (disposing)
            {
                connection.Dispose();
            }
            disposed = true;
        }

    }

    //Destructor
    ~DatabaseRecord()
    {
        Dispose(false);
    }
}

Wird das funktionieren? Werden Klassen, die die Verwendung von Instanzen von DatabaseRecord Bedürfnis, etwas besonderes zu tun oder wird die Dispose automatisch aufgerufen werden, sobald die Instanzen werden nicht mehr verwendet/referenziert wird? Ist dies effizienter/besser als mit using (var connection = new SqlConnection("...")) { } in jeder einzelnen Methode Körper, wo der Anschluss benötigt wird?

InformationsquelleAutor vitch | 2010-01-07
Schreibe einen Kommentar