Tengo algunas preguntas básicas sobre el patrón de eliminación en C#.Preguntas específicas sobre C# Dispose Pattern
En el siguiente fragmento de código, que parece ser una forma estándar de implementar el patrón de disposición, observará que los recursos administrados no se manejan si la eliminación es falsa. ¿Cómo/cuándo se manejan? ¿El GC viene y maneja los recursos administrados más adelante? Pero si ese es el caso, ¿qué hace la llamada GG.SuppressFinalize (this)? ¿Puede alguien darme un ejemplo de deshacerse de los recursos administrados? Desenganchar eventos viene a la mente. ¿Algo más? La forma en que se escribe el patrón, parece que se eliminarán (más adelante) si no hiciste nada en la sección "si (deshacerse)". ¿Comentarios?
protected virtual void Dispose(bool disposing)
{
if (!disposed)
{
if (disposing)
{
// Dispose managed resources.
}
// There are no unmanaged resources to release, but
// if we add them, they need to be released here.
}
disposed = true;
// If it is available, make the call to the
// base class's Dispose(Boolean) method
base.Dispose(disposing);
}
// implements IDisposable
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
¿Es cierto lo que he leído acerca de los bloqueos en Dispose (bool) en este hilo, How do I implement the dispose pattern in c# when wrapping an Interop COM Object?? Dice: "Comentario de Meta-meta, además de eso, es importante que nunca adquieras bloqueos ni uses bloqueo durante tu limpieza no administrada". ¿Por qué? ¿Se aplica también a recursos no administrados?
Finalmente, ¿alguna vez implementa un finalizador (~ MyClass() en C#) sin implementar IDisposable? Creo que leí en alguna parte que los finalizadores y IDisposable no son necesarios (o deseables) si no hay recursos no administrados. Sin embargo, veo el uso de un finalizador sin IDisposable en algunos ejemplos (véase: http://www.codeproject.com/KB/cs/idisposable.aspx como un ejemplo) Gracias, de Dave
¡Gracias por todas las buenas respuestas a todos! Solo puedo marcar uno como respuesta desafortunadamente. – Dave