Как реализовать шаблон dispose в c # при переносе COM-объекта Interop?

Мой класс содержит объект из Interop и вызывает для него метод, который заставляет его распределять вещи. Он также предоставляет метод для освобождения этого материала, поэтому я ожидаю, что я должен вызвать его в Dispose ():

class MyClass : IDisposable
{
    private DllName.ComClassName comInstance;

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

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

Теперь я должен расширить все это, чтобы следовать шаблону Dispose. У меня нет других одноразовых или неуправляемых ресурсов для освобождения, поэтому, если предположить, что comInstance является управляемым (разве не то, что делает Interop, а неуправляемый превращается в управляемый?), Я думаю, что шаблон распадается на:

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

Какие утечки, если я явно не вызову Dispose () для экземпляров MyClass, что сделает шаблон Dispose некорректным? Значит ли это, что comInstance должен быть неуправляемым, а шаблон -

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

~MyClass()
{
    DisposeComInstance();
}

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

EDIT:

To avoid cluttering my class with the full pattern, could I just seal my class? How do I know ComClassName (and in general any class) is unmanaged?

Ответы на вопрос(3)

Ваш ответ на вопрос