Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 20506|Respuesta: 1

[Fuente] C# Deep Dive - Destructors

[Copiar enlace]
Publicado en 17/8/2018 13:54:43 | | |
Los destructores rara vez se usan en C#, así que mucha gente se ha olvidado de ellos, aunque son de poca utilidad y son inútiles para estudiar.

Uno.        Características de los destructores:

Los destructores solo pueden existir en clases, no en estructuras; El destructor no puede tener modificadores, incluyendo modificadores de control de acceso, modificadores estáticos, modificadores abstractos, modificadores virtuales, etc.; El destructor no tiene parámetros, lo que significa que no puede haber sobrecarga.

Dos.        Cuándo llamar al destructor:

El destructor se llama cuando el basurero recicla el objeto, pero el basurero tiene una característica: es perezoso,
No recicla la variable inmediatamente después de salir del alcance y la vida útil, sino solo cuando considera que es apropiado, normalmente cuando la memoria es limitada. Por ejemplo:

Después de que el método btn_Click regresa, de debe terminarse, pero no se llama a su destructor, lo que indica que el recolector de basura no lo recicló; Cuando cierras el formulario, el destructor se ejecuta, lo que indica que al final del programa, el recogedor de basura se ve obligado a reciclarlo a regañadientes (^-^).
Por supuesto, podemos llamar a GC.Collect() para forzar el reciclaje:

Cuando haces clic en btn1, de1 y el nuevo Demo() se terminan y se llama al destructor.
de2 aún no ha expirado su periodo de vida, por lo que incluso si se llama al método GC.Collect, no se reciclará; cuando el btn1_Click regresa, de2 ha expirado su periodo de vida, pero debido a la pereza del recogedor de basura, sigue sin reciclarse; No es hasta que btn2 llama al método GC.Collect que se recupera de2 y se llama a su destructor.

Una forma de evitar llamadas a destructores es implementar la interfaz IDisposable, que define un método único: Dispose().
Esto evita que el destructor sea llamado internamente, lo que significa que si estás aburrido, puedes implementar esta interfaz sin llamar al GC.SuppressFinalize(^-^), que no tiene sentido porque no bloquea al destructor:

Ahora no se llamará el destructor de de1.

Tres.        La esencia del destructor:

Un destructor es esencialmente un método que adopta la forma de:

Normalmente pensamos que los destructores solo pueden ser llamados por el sistema, no por los propios programadores, pero esto no es del todo cierto, y los destructores también pueden llamarse explícitamente, al fin y al cabo, es solo un método:

Los destructores no son necesarios a menos que se abran recursos no gestionados en la clase





Anterior:C# Objetos desduplicados condicionalmente en C#
Próximo:Mensaje de excepción: "StrongTypingException: IsPrima...
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com