187 votes

Quel est le tilde avant un nom de fonction moyenne en C#?

Je suis à la recherche un peu de code et il a de cette déclaration:

~ConnectionManager()
{
    Dispose(false);
}

La classe implémente l' IDisposable interface, mais je ne sais pas si cela fait partie de qui le tilde(~) est utilisé pour.

237voto

Patrick Desjardins Points 51478

~ est le destructeur

  1. Les destructeurs sont appelés automatiquement, et ne peut être invoquée explicitement.
  2. Les destructeurs ne peut pas être surchargé. Ainsi, une classe peut avoir, au plus, un seul destructeur.
  3. Les destructeurs ne sont pas héritées. Ainsi, une classe n'a pas de destructeurs autre que celui, qui peut être déclaré.
  4. Les destructeurs ne peuvent pas être utilisés avec des structures. Ils sont utilisés uniquement avec des classes. Une instance devient admissible à des fins de destruction lorsqu'il n'est plus possible pour n'importe quel code à utiliser l'instance.
  5. L'exécution du destructeur de l'instance peut se produire à tout moment après que l'instance devient admissible à des fins de destruction.
  6. Lorsqu'une instance est détruite, les destructeurs dans sa chaîne d'héritage sont appelés, dans l'ordre, de la plupart des dérivés de moins dérivées.

Finaliser

En C#, la méthode Finalize effectue les opérations qu'un standard C++ destructeur ferait. En C#, vous n'avez pas de nom de Finaliser -- vous d'utiliser le C++ destructeur de la syntaxe de placer un symbole tilde ( ~ ) devant le nom de la classe.

Disposer

Il est préférable de disposer des objets dans un Close() ou Dispose() méthode qui peut être appelé explicitement par l'utilisateur de la classe. Finaliser (destructeur) sont appelés par le GC.

Le IDisposable interface indique au monde que votre classe est titulaire sur les ressources qui doivent être éliminés et fournit aux utilisateurs un moyen de les libérer. Si vous avez besoin de mettre en œuvre un outil de finalisation dans votre classe, votre méthode dispose doit utiliser l' GC.SuppressFinalize() méthode pour s'assurer que la finalisation de votre instance est supprimée.

Ce qu'il faut utiliser?

Il n'est pas légal de faire appel d'un destructeur de manière explicite. Votre destructeur sera appelé par le garbage collector. Si vous ne poignée de précieuses ressources non managées (tels que les descripteurs de fichiers) que vous souhaitez fermer et d'en disposer le plus rapidement possible, vous devez implémenter l'interface IDisposable.

46voto

Jon Skeet Points 692016

C'est un outil de finalisation. Pour être honnête, vous devriez très rarement besoin d'écrire un finaliseur. Vous avez vraiment besoin d'écrire un si:

  • Vous avez un accès direct à une ressource non managée (par exemple, un IntPtr) et vous ne pouvez pas utiliser SafeHandle ce qui le rend plus facile
  • Vous êtes à la mise en œuvre de IDisposable dans une classe qui n'est pas scellé. (Ma préférence est pour sceller les classes, sauf s'ils sont conçus pour l'héritage.) Un finaliseur est une partie de l'canonique modèle dispose dans de tels cas.

9voto

torial Points 9883

Il est utilisé pour indiquer le destructeur de la classe.

5voto

Santiago Palladino Points 2235

Même en tant que C++, c'est le destructeur; toutefois, en C# vous n'avez pas appelé explicitement, elle est appelée lorsque l'objet se collectées.

0voto

stephenbayer Points 5548

~ représente généralement un déconstructeur. ce qui est exécutée juste avant une classe de matrices.

Voici une description de C# deconstructors j'ai trouvé

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X