¿Por qué deberíamos llamar a SuppressFinalize cuando no tenemos un destructor?
Tengo pocas preguntas para las que no puedo obtener una respuesta adecuada.
1) ¿Por qué deberíamos llamar a SuppressFinalize en la función Dispose cuando no tenemos un destructor?
2) Desechar y finalizar se utilizan para liberar recursos antes de que el objeto se recolecte basura. Ya sea que se trate de un recurso administrado o no administrado, debemos liberarlo, entonces, ¿por qué necesitamos una condición dentro de la función de disposición, que dice pasar 'verdadero' cuando llamamos a esta función anulada desde IDisposable? Deseche y pase falso cuando se llama desde una finalización.
Vea el siguiente código que copié de la red.
class Test : IDisposable
{
private bool isDisposed = false;
~Test()
{
Dispose(false);
}
protected void Dispose(bool disposing)
{
if (disposing)
{
// Code to dispose the managed resources of the class
}
// Code to dispose the un-managed resources of the class
isDisposed = true;
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
}
¿Qué sucede si elimino la función de eliminación protegida booleana e implemento la siguiente?
class Test : IDisposable
{
private bool isDisposed = false;
~Test()
{
Dispose();
}
public void Dispose()
{
// Code to dispose the managed resources of the class
// Code to dispose the un-managed resources of the class
isDisposed = true;
// Call this since we have a destructor . what if , if we don't have one
GC.SuppressFinalize(this);
}
}