Je regarde du code et il a cette déclaration:
~ConnectionManager()
{
Dispose(false);
}
La classe implémente l'interface IDisposable
, mais je ne sais pas si cela fait partie de l'utilisation du tilde (~).
~ est le destructeur
Finaliser
En C #, la méthode Finalize effectue les opérations qu'un destructeur C++ standard ferait. En C #, vous ne le nommez pas Finalize - vous utilisez la syntaxe destructrice C++ de placer un symbole tilde (~) avant le nom de la classe.
Éliminer
Il est préférable de disposer des objets dans une méthode Close()
ou Dispose()
qui peut être appelée explicitement par l'utilisateur de la classe. Finalize (destructeur) sont appelés par le GC.
L'interface IDisposable indique au monde que votre classe détient des ressources qui doivent être supprimées et fournit aux utilisateurs un moyen de les libérer. Si vous avez besoin d'implémenter un finaliseur dans votre classe, votre méthode Dispose devrait utiliser la méthode GC.SuppressFinalize()
pour garantir la finalisation de votre l'instance est supprimée.
Quoi utiliser?
Il n'est pas légal d'appeler explicitement un destructeur. Votre destructeur sera appelé par le garbage collector. Si vous gérez de précieuses ressources non gérées (telles que des descripteurs de fichiers) que vous souhaitez fermer et éliminer le plus rapidement possible, vous devez implémenter l'interface IDisposable.
Il s'agit d'un finaliseur . Pour être honnête, vous devriez très rarement avoir besoin d'écrire un finaliseur. Vous n'avez vraiment besoin d'en écrire qu'un si:
IntPtr
) et vous ne pouvez pas utiliser SafeHandle
ce qui le rend plus facileIDisposable
dans une classe qui n'est pas scellée. (Ma préférence est de sceller les classes à moins qu'elles ne soient conçues pour l'héritage.) Un finaliseur fait partie du modèle canonique Dispose dans de tels cas.Il est utilisé pour indiquer le destructeur de la classe.
Identique à C++, c'est le destructeur; cependant en C # vous ne l'appelez pas explicitement, il est invoqué lorsque l'objet est collecté.
Voir Destructeurs (Guide de programmation C #) . Sachez cependant que, contrairement à C++, le programmeur n'a aucun contrôle sur le moment où le destructeur est appelé car cela est déterminé par le garbage collector.
~ représente généralement un déconstructeur. qui est exécuté juste avant la mort d'un objet.
Voici une description des déconstructeurs C # que j'ai trouvés