Question

  

Possible en double:    Qu'est-ce que le tilde (~) moyenne en C #?

class ResourceWrapper
{
    int handle = 0;
    public ResourceWrapper()
    {
        handle = GetWindowsResource();
    }
    ~ResourceWrapper()                     //this line here
    {
        FreeWindowsResource(handle);
        handle = 0;
    }
    [DllImport("dll.dll")]
    static extern int GetWindowsResource();
    [DllImport("dll.dll")]
    static extern void FreeWindowsResource(int handle);
}

Qu'est-ce que le tilde faire sur la ligne indiquée.

Je pensais que c'était l'opérateur NOT binaire, enfait je ne comprends pas vraiment ce bloc tout là, (la ligne commentée et les parenthèses blovk après), il est pas un methd, ou un paramètre ou quoi que ce soit, ce qui est et pourquoi est-il un tilde avant qu'il?

Était-ce utile?

La solution

C'est destructor. Il faut veiller à ce que toutes les ressources sont libérées lors de la collecte des ordures.

Autres conseils

met en œuvre le finaliseur (la méthode Finaliser) de la classe. Normalement, vous ne devriez pas mettre en œuvre un finaliseur.

par exemple. faire pour les classes qui détiennent des ressources non gérées externes, mais assurez-vous de mettre en œuvre le modèle IDisposable dans ce cas aussi.

Comme en C ++, ~ClassName est la méthode de destructor. Il est appelé en C # lorsque l'objet en question est nettoyée par le garbage collector. Contrairement à C ++ où il y a des moments déterministes lorsque le destructeur est appelé, il n'y a aucun moyen de prédire quand il sera appelé (ou même si elle sera appelée) en C #.

Ce que vous cherchez probablement est le modèle de IDisposable, qui fournit une meilleure approche à ce sujet.

C'est un Destructeur . Il vous donne un contrôle implicite sur la libération des ressources. Autrement dit, il est appelé par le IDisposable Consultez mise en œuvre Finaliser et Dispose pour nettoyer des Unmanaged ressources . Framework Design Guidelines a également plus d'informations.

Ack, je viens de trouver la réponse et ne peut pas voir comment supprimer ma question. il indique le Destructeur de la classe

Je n'ai pas la moindre idée de C #, mais de ce que le code fait, cela ressemble à une deconstructor, en disant

  1. libérer la ressource référencée par handle
  2. set handle à 0 pour être sûr

serait de nature vont de pair avec la notion de « non » et ...:)

Je peux me tromper mais ...

greetz

back2dos

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top