Como faço para implementar o padrão dispor em c # ao acondicionar um objeto COM Interop?
Minha classe contém um objeto da Interop e chama um método que faz com que aloque o material. Ele também expõe um método para liberar essas coisas, então espero chamar isso em Dispose ():
class MyClass : IDisposable
{
private DllName.ComClassName comInstance;
void SomeMethod()
{
comInstance = new DllName.ComClassName();
comInstance.AllocStuff();
}
public void Dispose()
{
comInstance.FreeThatStuff();
}
}
Agora, eu deveria expandir tudo isso para seguir o padrão Dispose. Não tenho nenhum outro recurso descartável ou não gerenciado para liberar, portanto, supondo que o comInstance seja gerenciado (não é isso que a Interop faz, não é gerenciado no gerenciado?), Acho que o padrão se desativa para:
public void Dispose()
{
if (comInstance != null)
{
comInstance.FreeStuff();
comInstance = null;
}
}
Quais vazamentos a menos que eu chame explicitamente Dispose () em instâncias de MyClass, o que tornaria o padrão Dispose falho? Então isso significa que a instanciação deve ser não gerenciada, e o padrão se desativa para:
public void Dispose()
{
DisposeComInstance();
GC.SuppressFinalize(this);
}
~MyClass()
{
DisposeComInstance();
}
private void DisposeComInstance()
{
if (comInstance != null)
{
comInstance.FreeStuff();
comInstance = null;
}
}
EDITAR:
Para evitar bagunçar minha turma com o padrão completo, eu poderia apenas selar minha turma?Como sei que ComClassName (e em geral qualquer classe) não é gerenciado?