Comment ajouter un destructeur à une classe faite sur mesure en C# afin de le détruire quand ce n'est plus nécessaire?C#: Comment ajouter un destructeur à une classe personnalisée?
Répondre
Voici un exemple:
class Car
{
~Car() // destructor
{
// cleanup statements...
}
}
Plus d'info sur MSDN.
N'utilisez pas de destructeur. Utilisez plutôt Dispose() et Finalize().
Ceci est un article tout à fait bien à ce sujet: When and How to Use Dispose and Finalize in C#
Dernière vérification, finaliser la syntaxe de destructeur utilisée en C#. Ils sont la même chose. (Mais il serait probablement moins déroutant de l'appeler un finaliseur car un destructeur (en C++ au moins) fonctionne un peu différemment) – jalf
Destructeurs ne sont pas utilisés pour détruire des objets en tant que tels, on utilise pour nettoyer les ressources utilisées lorsque votre objet est détruit. Les destructeurs sont généralement utilisés pour nettoyer les ressources non managées, comme lors de l'utilisation d'Interop/p/invoke.
class Person
{
// Destructor
~Person()
{
// Cleanup resources that the object used here.
}
}
Soyez vraiment prudent !!! Vous devriez essayer d'éviter autant que possible l'utilisation de destructeurs en C#.
Lorsque votre code est:
class Person
{
// Destructor
~Person()
{
// Clean-up resources that the object used here.
}
}
le compilateur génère ce code pour vous:
class Person
{
// Destructor
public override void Finalize()
{
// your clean up
base.Finalize();
}
}
Comme vous pouvez le voir implémentaient simplement la méthode Finaliser. Dans la plate-forme .Net, une mauvaise implémentation de la méthode Finalize peut entraîner une fuite de mémoire dans votre application et, si elle est correctement implémentée, et un objet avec une implémentation de méthode Finalize, 2 appels GC doivent être libérés.
Si vous venez de C++ vous devriez juste oublier l'idée d'un destructeur du tout, vous n'avez pas besoin d'eux le GC devrait prendre soin de vos classes normales.
~ className() {}
- 1. Databinding à une classe personnalisée en C#
- 2. Comment ajouter un événement à une classe
- 3. Comment ajouter une conversion implicite personnalisée à un type C++ dans Boost :: Python?
- 4. En C#, quelle est la différence entre un destructeur et une méthode Finalize dans une classe?
- 5. Comment ajouter un objet IDisposable + delegate à une classe existante
- 6. Comment ajouter une colonne personnalisée à une grille MvcContrib?
- 7. Comment puis-je ajouter une classe à un CodeIgniter Anchor
- 8. Problèmes Xerces-C; segfault sur appel à un destructeur d'objet
- 9. Comment ajouter "onload" à ma classe Dojo?
- 10. WPF - Ajouter une police personnalisée
- 11. Comment utiliser une classe personnalisée dans XAML?
- 12. Ajout d'objets de classe personnalisée à listBox en C#
- 13. Comment écrire une classe simple en C++?
- 14. Ajouter une classe partielle à TableAdapter
- 15. C#: Comment ajouter une info-bulle à un contrôle?
- 16. C#: Comment ajouter une ligne à un mémo?
- 17. Comment s'inscrire à un autre événement de classe dans C#?
- 18. Ajouter une balise personnalisée à la validation Visual Studio
- 19. SharePoint: Comment puis-je ajouter par programme des éléments à une instance de liste personnalisée?
- 20. Comment ajouter une étape de construction personnalisée à un projet basé sur automake dans KDevelop?
- 21. sérialisation classe dérivée personnalisée
- 22. Ajouter un champ à une classe de domaine Grails?
- 23. Comment ajouter un fichier cs à un projet C# existant?
- 24. C# ajouter une couche à une image
- 25. Comment ajouter une commande routée personnalisée dans WPF?
- 26. Comment ajouter un tag de classe à body?
- 27. Comment ajouter une option de partage personnalisée dans iMovie?
- 28. Comment ajouter une entrée de texte personnalisée aux images dynamiquement
- 29. Conception d'une classe aléatoire personnalisée
- 30. PHP: destructeur vs register_shutdown_function
Ceci n'est pas un destructeur - c'est un finaliseur. Alors qu'un destructeur C++ et un finaliseur C# ressemblent, la sémantique est assez différente et ne devrait pas être confondue. – Bevan