3 Stimmen

Implementieren von Dispose in einer von Stream abgeleiteten Klasse

Ich baue eine Klasse, die sich von Stream um einen COM IStream zu verpacken. Allerdings bin ich auf ein Problem gestoßen, bei dem ich den COM-IStream deteministisch freigeben muss.

Ok, das ist ganz einfach: Verwenden Sie Marshal.ReleaseComObject im Dispose Methode. Ich bin mir jedoch nicht sicher, ob es so einfach ist. Die Stream Basisklasse hat bereits eine geschützte virtuelle Methode Dispose(boolean) . Hier ist meine erste Idee:-

    ~ComStreamWrapper()
    {
        if (!_Disposed)
        {
            iop.Marshal.FreeCoTaskMem(_Int64Ptr);
            iop.Marshal.ReleaseComObject(_IStream);
        }
    }

    protected override void Dispose(bool disposing)
    {
        base.Dispose(disposing);

        if (!_Disposed)
        {
            if (disposing)
            {
                iop.Marshal.FreeCoTaskMem(_Int64Ptr);
                iop.Marshal.ReleaseComObject(_IStream);
            }
            _Disposed = true;
        }
    }

Sie werden feststellen, dass es keine Implementierung von Dispose() selbst. Ich gehe derzeit davon aus, dass die bestehende Implementierung auf Stream tut, was ich brauche. Das ist der Aufruf Diposing(true) y GC.SuppressFinalize . Ist diese Annahme fehlerhaft?

Habe ich etwas verpasst? Gibt es einen besseren Ansatz? Sie sehen mehr von der Grundklasse in dieser répondre auf eine frühere Frage.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X