Jak zaimplementować wzorzec dispose w c # podczas zawijania obiektu COM Interop?

Moja klasa zawiera obiekt z Interop i wywołuje na nim metodę, która powoduje przydzielenie rzeczy. Udostępnia także metodę uwolnienia tego materiału, więc spodziewam się, że powinienem to nazwać w Dispose ():

class MyClass : IDisposable
{
    private DllName.ComClassName comInstance;

    void SomeMethod()
    {
        comInstance = new DllName.ComClassName();
        comInstance.AllocStuff();
    }

    public void Dispose()
    {
        comInstance.FreeThatStuff();
    }
}

Teraz powinienem to wszystko rozwinąć, aby podążać za wzorem Dispose. Nie mam innych dostępnych ani niezarządzanych zasobów do wydania, więc zakładając, że comInstance jest zarządzany (czy nie jest to tym, co robi Interop, zawija niezarządzane w zarządzane?), Myślę, że wzorzec przestaje być:

public void Dispose()
{
    if (comInstance != null)
    {
        comInstance.FreeStuff();
        comInstance = null;
    }
}

Które przecieki, chyba że jawnie wywołam Dispose () na instancjach MyClass, co spowodowałoby, że wzorzec Dispose byłby wadliwy? Czy to oznacza, że ​​comInstance musi być niezarządzane, a wzorzec przestaje być:

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

~MyClass()
{
    DisposeComInstance();
}

private void DisposeComInstance()
{
    if (comInstance != null)
    {
        comInstance.FreeStuff();
        comInstance = null;
    }
}

EDYTOWAĆ:

Aby uniknąć zaśmiecania mojej klasy pełnym wzorem, czy mogę po prostu zapieczętować moją klasę?Skąd mam wiedzieć, że ComClassName (i ogólnie każda klasa) jest niezarządzany?

questionAnswers(3)

yourAnswerToTheQuestion