Domanda

  

Eventuali duplicati:
   Cosa significa la tilde (~) media in 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);
}

Cosa fa la tilde fare sulla linea indicata.

Ho pensato che fosse il NOT bit a bit operatore, infatti io non capisco che tutto il blocco lì, (blovk la linea commentata e le parentesi dopo), non è un methd, o di un parametro o nulla, che cosa è e perché c'è una tilde prima di esso?

È stato utile?

Soluzione

Questo è il distruttore . Si prende cura che tutte le risorse vengono rilasciate al momento della raccolta dei rifiuti.

Altri suggerimenti

Questa implementa il finalizzatore (il metodo Finalize) della classe. Normalmente non si deve implementare un finalizzatore.

es. fare questo per le classi che detengono risorse non gestite esterne, ma essere sicuri di implementare il pattern IDisposable anche in questo caso.

Come in C ++, ~ClassName è il metodo distruttore. Esso viene chiamato in C # quando l'oggetto in questione viene ripulito dal garbage collector. A differenza di C ++, dove ci sono momenti deterministici quando il distruttore è chiamato, non c'è modo di prevedere quando sarà chiamato (o anche se si chiamerà) in C #.

Quello che state probabilmente cercando è il modello IDisposable, che fornisce un approccio molto migliore per questo.

Questo è un Destructor . Ti dà il controllo implicito sopra liberando risorse. Cioè, è chiamato dal Garbage Collector . Se si desidera che il controllo esplicito sulla liberazione di risorse, è possibile implementare IDisposable Scopri Implementazione Finalizza e Dispose per pulire non gestito risorse . Il Framework Design Guidelines ha anche ulteriori informazioni.

Ack, ho appena trovato la risposta e non riesco a vedere come eliminare la mia domanda. specifica il distruttore della classe

non ho idea di C #, ma da quello che fa il codice, questo sembra un decostruttore, dicendo

  1. liberare la risorsa di riferimento per handle
  2. set handle per 0 per essere sicuri

sarebbe sorta di andare insieme con il concetto di "non", così ...:)

I può essere sbagliato però ...

greetz

back2dos

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top