En Visual Studio, al escribir la línea "Implements IDisposable
", el IDE agrega automáticamente:VB.NET - ¿Se debe agregar un método Finalize al implementar IDisposable?
- una variable
disposedValue
miembro de - un
Sub Dispose() Implements IDisposable.Dispose
- un
Sub Dispose(ByVal disposing As Boolean)
El Dispose()
debería haber solo, y el código de limpieza debe ponerse en Dispose(disposing)
.
Sin embargo, el Dispose Finalize Pattern dice que también debe anular Sub Finalize()
para llamar al Dispose(False)
. ¿Por qué el IDE también agrega esto? ¿Debo agregarlo yo mismo, o de alguna manera se lo llama implícitamente?
EDIT: ¿Alguna idea de por qué el IDE agrega automáticamente el 80% de las cosas necesarias pero deja fuera el método Finalize? ¿No es el objetivo de este tipo de función ayudarlo
no olvidar estas cosas?
EDIT2: Gracias a todos por sus excelentes respuestas, ¡esto ahora tiene mucho sentido!
Implementar Eliminar no significa que también deba implementar un finalizador. Puede liberar recursos no administrados en un método de eliminación sin necesidad de un finalizador. Si debe implementar un finalizador, su lógica de limpieza real debe estar en una función separada que elimine y finalice la llamada. –
Eso es incorrecto.Si confía únicamente en Dispose() para liberar recursos no administrados, la memoria se fugará en los casos en que no se invoque Dispose. Para eso está el finalizador. – Laurent
No estoy seguro de por qué no contesté el comentario anterior de Scott, no debo haberlo notado, pero Laurent tiene razón, si su Dispose está limpiando recursos no administrados, se requiere una Finalize para mayor seguridad. No lo dejes porque eres flojo. –