Estoy mirando un código y tiene esta declaración:
~ConnectionManager()
{
Dispose(false);
}
La clase implementa la IDisposable
interfaz, pero no sé si eso es parte de eso para lo que se usa la tilde (~).
Estoy mirando un código y tiene esta declaración:
~ConnectionManager()
{
Dispose(false);
}
La clase implementa la IDisposable
interfaz, pero no sé si eso es parte de eso para lo que se usa la tilde (~).
Respuestas:
~ es el destructor
Finalizar
En C #, el método Finalize realiza las operaciones que haría un destructor C ++ estándar. En C #, no lo nombra Finalizar: utiliza la sintaxis del destructor de C ++ para colocar un símbolo de tilde (~) antes del nombre de la clase.
Disponer
Es preferible disponer de objetos en un método Close()
o Dispose()
que pueda ser llamado explícitamente por el usuario de la clase. Finalize (destructor) son llamados por el GC.
La interfaz IDisposable le dice al mundo que su clase retiene recursos que necesitan ser eliminados y proporciona a los usuarios una forma de liberarlos. Si necesita implementar un finalizador en su clase, su método Dispose debe usar el GC.SuppressFinalize()
método para garantizar que se suprima la finalización de su instancia.
¿Qué usar?
No es legal llamar a un destructor explícitamente. Su recolector será llamado por el recolector de basura. Si maneja valiosos recursos no administrados (como los manejadores de archivos) que desea cerrar y desechar lo más rápido posible, debe implementar la interfaz IDisposable.
Finalize
método se llama de forma recursiva para todas las instancias de la cadena de herencia, desde la más derivada hasta la menos derivada" . Sin embargo, tenga en cuenta que ese no es el mismo comportamiento que obtendría de los destructores heredables.
Este es un finalizador . Para ser honesto, rara vez necesitará escribir un finalizador. Realmente solo necesitas escribir uno si:
IntPtr
) y no puede usarlo, SafeHandle
lo que lo hace más fácil.IDisposable
en una clase que no está sellada. (Prefiero sellar clases a menos que estén diseñadas para herencia). Un finalizador es parte del patrón de eliminación canónico en tales casos.Se utiliza para indicar el destructor para la clase.
try/finally
bloque generalmente inútil que garantiza que Finalize
se llame al método padre . La mayoría de las cosas que son ciertas para los destructores son verdaderas para los finalizadores, y viceversa, pero las palabras significan cosas ligeramente diferentes.
Igual que C ++, es el destructor; sin embargo, en C # no lo llama explícitamente, se invoca cuando se recolecta el objeto.
Consulte Destructores (Guía de programación de C #) . Sin embargo, tenga en cuenta que, a diferencia de C ++, el programador no tiene control sobre cuándo se llama al destructor porque esto lo determina el recolector de basura.
~ generalmente representa un deconstructor. que se ejecuta justo antes de que muera un objeto.
Aquí hay una descripción de los deconstructores de C # que encontré