Wie implementiere ich das Dispose-Muster in c #, wenn ich ein Interop-COM-Objekt einbinde?

Meine Klasse enthält ein Objekt von Interop und ruft eine Methode auf, die es veranlasst, Sachen zuzuweisen. Es stellt auch eine Methode zur Verfügung, mit der das Zeug freigegeben werden kann. Ich erwarte, dass ich dies in Dispose () aufrufen sollte:

class MyClass : IDisposable
{
    private DllName.ComClassName comInstance;

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

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

Jetzt sollte ich alles erweitern, um dem Dispose-Muster zu folgen. Ich habe keine anderen verfügbaren oder nicht verwalteten Ressourcen freizugeben. Unter der Annahme, dass comInstance verwaltet wird (ist es nicht das, was Interop tut, das nicht verwaltet wird?), Wird das Muster folgendermaßen aufgelöst:

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

Welche Lecks treten auf, wenn ich Dispose () nicht explizit für Instanzen von MyClass aufrufe, wodurch das Dispose-Muster fehlerhaft wird? Bedeutet dies, dass comInstance nicht verwaltet werden muss und das Muster sich auflöst:

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

~MyClass()
{
    DisposeComInstance();
}

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

BEARBEITEN:

Könnte ich meine Klasse einfach besiegeln, um zu vermeiden, dass meine Klasse mit dem vollen Muster überfüllt ist?Woher weiß ich, dass ComClassName (und im Allgemeinen jede Klasse) nicht verwaltet wird?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage