¿Cómo implemento el patrón de disposición en c # al ajustar un objeto COM de interoperabilidad?
Mi clase contiene un objeto de Interop y llama a un método que hace que asigne cosas. También expone un método para liberar esas cosas, así que espero que debería llamar a esto en Dispose ():
class MyClass : IDisposable
{
private DllName.ComClassName comInstance;
void SomeMethod()
{
comInstance = new DllName.ComClassName();
comInstance.AllocStuff();
}
public void Dispose()
{
comInstance.FreeThatStuff();
}
}
Ahora, debería expandir todo eso para seguir el patrón de Disposición. No tengo otros recursos disponibles o no administrados para liberar, por lo que, suponiendo que se administre comInstance (¿no es eso lo que hace Interop, se ajusta sin gestionar en administrado?), Creo que el patrón se disuelve en:
public void Dispose()
{
if (comInstance != null)
{
comInstance.FreeStuff();
comInstance = null;
}
}
¿Qué fugas, a menos que yo llame explícitamente a Dispose () en instancias de MyClass, que haría que el patrón de Dispose fallara? Entonces, ¿eso significa que la resistencia debe ser no administrada, y el patrón se disuelve en:
public void Dispose()
{
DisposeComInstance();
GC.SuppressFinalize(this);
}
~MyClass()
{
DisposeComInstance();
}
private void DisposeComInstance()
{
if (comInstance != null)
{
comInstance.FreeStuff();
comInstance = null;
}
}
EDITAR:
Para evitar saturar mi clase con el patrón completo, ¿podría simplemente sellar mi clase?¿Cómo sé que ComClassName (y en general cualquier clase) no está administrado?