2009-01-28 6 views

Répondre

6

Lecture this. Mais vous pourriez envisager d'implémenter IDisposable qui offre généralement une solution plus élégante. Allez here pour plus d'informations.

0

Voici un exemple:

class Car 
{ 
    ~Car() // destructor 
    { 
     // cleanup statements... 
    } 
} 

Plus d'info sur MSDN.

+0

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

5

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#

+0

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

1

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. 
    } 
} 
1

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.

Questions connexes