Je regarde du code et il contient cette déclaration:
~ConnectionManager()
{
Dispose(false);
}
La classe implémente l' IDisposable
interface, mais je ne sais pas si cela fait partie de cela le tilde (~) est utilisé.
Je regarde du code et il contient cette déclaration:
~ConnectionManager()
{
Dispose(false);
}
La classe implémente l' IDisposable
interface, mais je ne sais pas si cela fait partie de cela le tilde (~) est utilisé.
Réponses:
~ 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 du destructeur C ++ qui consiste à placer un symbole tilde (~) avant le nom de la classe.
Disposer
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 (destructor) sont appelés par le GC.
L' interface IDisposable indique au monde que votre classe conserve les ressources qui doivent être supprimées et fournit aux utilisateurs un moyen de les libérer. Si vous devez implémenter un finaliseur dans votre classe, votre méthode Dispose doit utiliser la GC.SuppressFinalize()
méthode pour garantir que la finalisation de votre instance est supprimée.
Quoi utiliser?
Il n'est pas légal d'appeler un destructeur explicitement. 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.
Finalize
méthode est appelée récursivement pour toutes les instances de la chaîne d'héritage, de la plus dérivée à la moins dérivée" . Notez que ce n'est pas le même comportement que celui des destructeurs héritables.
Ceci est 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 l'utiliser, SafeHandle
ce qui facilite les chosesIDisposable
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 de Dispose canonique dans de tels cas.Il est utilisé pour indiquer le destructeur de la classe.
try/finally
bloc généralement inutile qui garantit que la Finalize
méthode parente est appelée. La plupart des choses qui sont vraies pour les destructeurs sont vraies pour les finaliseurs, et vice versa, mais les mots signifient des choses légèrement différentes.
Identique au C ++, c'est le destructeur; cependant en C # vous ne l'appelez pas explicitement, il est invoqué lorsque l'objet est collecté.
Voir Destructors (Guide de programmation C #) . Sachez cependant que, contrairement au 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