Cet article est un article miroir de traduction automatique, veuillez cliquer ici pour accéder à l’article original.

Vue: 20506|Répondre: 1

[Source] Plongée profonde en C# - Destructeurs

[Copié le lien]
Publié sur 17/08/2018 13:54:43 | | |
Les destructeurs sont rarement utilisés en C#, donc beaucoup de gens les ont oubliés, bien qu’ils soient peu utiles et inutiles à étudier.

Un.        Caractéristiques des destructeurs :

Les destructeurs ne peuvent exister qu’en classes, pas en structures ; Le destructeur ne peut avoir aucun modificateur, y compris les modificateurs de contrôle d’accès, les modificateurs statiques, les modificateurs abstraits, les modificateurs virtuels, etc. ; Le destructeur n’a aucun paramètre, ce qui signifie qu’il ne peut pas y avoir de surcharge.

Deux.        Quand appeler le destructeur :

Le destructeur est appelé lorsque l’objet est recyclé par le rambeau-ordures, mais que le rambeau-ordures a une caractéristique : il est paresseux,
Il ne recycle pas la variable immédiatement après avoir quitté le périmètre et la durée de vie, mais seulement lorsqu’il la juge appropriée, généralement lorsque la mémoire est limitée. Par exemple :

Après le retour de la méthode btn_Click, de doit être terminé, mais son destructeur n’est pas appelé, ce qui indique que le collecteur n’a pas recyclé ; Lorsque vous fermez le formulaire, le destructeur est exécuté, ce qui indique qu’à la fin du programme, le rambeau-ordures est contraint à contrecœur de le recycler (^-^).
Bien sûr, nous pouvons appeler GC.Collect() pour forcer le recyclage :

Quand vous cliquez sur btn1, de1 et le nouveau Demo() sont terminés et le destructeur est appelé.
de2 n’a pas encore expiré sa durée de vie, donc même si la méthode GC.Collect est appelée, elle ne sera pas recyclée ; lorsque le btn1_Click revient, de2 a expiré sa durée de vie, mais en raison de la paresse du collecteur d’ordures, elle n’est toujours pas recyclée ; Ce n’est qu’à partir de la méthode GC.Collect par btn2 que de2 est récupéré et son destructeur est appelé.

Une façon d’éviter les appels destructeurs est d’implémenter l’interface IDisposable, qui définit une méthode unique : Dispose().
Cela empêche le destructeur d’être appelé en interne, ce qui signifie que si vous vous ennuyez, vous pouvez implémenter cette interface sans appeler le GC.SuppressFinalize(^-^), ce qui est dénué de sens car il ne bloque pas le destructeur :

Maintenant, le destructeur de de1 ne sera pas appelé.

Trois.        L’essence du destructeur :

Un destructeur est essentiellement une méthode qui prend la forme suivante :

En général, nous pensons que les destructeurs ne peuvent être appelés que par le système, pas par les programmeurs eux-mêmes, mais ce n’est pas entièrement vrai, et les destructeurs peuvent aussi être appelés explicitement, après tout, ce n’est qu’une méthode :

Les destructeurs ne sont pas nécessaires sauf si des ressources non gérées sont ouvertes dans la classe





Précédent:C# Distinct déduplique conditionnellement les objets
Prochain:Message d’exception : « StrongTypingException : IsPrima...
Démenti:
Tous les logiciels, supports de programmation ou articles publiés par Code Farmer Network sont uniquement destinés à l’apprentissage et à la recherche ; Le contenu ci-dessus ne doit pas être utilisé à des fins commerciales ou illégales, sinon les utilisateurs assumeront toutes les conséquences. Les informations sur ce site proviennent d’Internet, et les litiges de droits d’auteur n’ont rien à voir avec ce site. Vous devez supprimer complètement le contenu ci-dessus de votre ordinateur dans les 24 heures suivant le téléchargement. Si vous aimez le programme, merci de soutenir un logiciel authentique, d’acheter l’immatriculation et d’obtenir de meilleurs services authentiques. En cas d’infraction, veuillez nous contacter par e-mail.

Mail To:help@itsvse.com