Sto guardando un po 'di codice e ha questa affermazione:
~ConnectionManager()
{
Dispose(false);
}
La classe implementa l' IDisposable
interfaccia, ma non so se questo fa parte della tilde (~).
Sto guardando un po 'di codice e ha questa affermazione:
~ConnectionManager()
{
Dispose(false);
}
La classe implementa l' IDisposable
interfaccia, ma non so se questo fa parte della tilde (~).
Risposte:
~ è il distruttore
Finalizza
In C #, il metodo Finalize esegue le operazioni che farebbe un distruttore C ++ standard. In C # non lo si chiama Finalizza: si utilizza la sintassi del distruttore C ++ per posizionare un simbolo tilde (~) prima del nome della classe.
Smaltire
È preferibile disporre di oggetti in un metodo Close()
o Dispose()
che può essere chiamato in modo esplicito dall'utente della classe. Finalize (destructor) sono chiamati dal GC.
L' interfaccia IDisposable dice al mondo che la tua classe tiene in mano risorse che devono essere smaltite e offre agli utenti un modo per rilasciarle. Se è necessario implementare un finalizzatore nella propria classe, il metodo Dispose deve utilizzare il GC.SuppressFinalize()
metodo per assicurarsi che la finalizzazione dell'istanza venga soppressa.
Cosa usare?
Non è legale chiamare esplicitamente un distruttore. Il distruttore verrà chiamato dal garbage collector. Se si gestiscono preziose risorse non gestite (come gli handle di file) che si desidera chiudere e smaltire il più rapidamente possibile, è necessario implementare l'interfaccia IDisposable.
Finalize
metodo viene chiamato in modo ricorsivo per tutte le istanze nella catena dell'ereditarietà, dal più derivato al meno derivato" . Nota che non è lo stesso comportamento che potresti avere dai distruttori ereditabili.
Questo è un finalizzatore . Ad essere onesti, dovresti raramente scrivere un finalizzatore. Devi solo scriverne uno se:
IntPtr
) e non puoi utilizzarlo per SafeHandle
renderlo più sempliceIDisposable
in una classe che non è sigillata. (La mia preferenza è quella di sigillare le classi a meno che non siano progettate per l'ereditarietà). In questi casi, un finalizzatore fa parte del modello di smaltimento canonico.È usato per indicare il distruttore per la classe.
try/finally
blocco generalmente inutile che assicura che Finalize
venga chiamato il metodo parent . Molte cose vere per i distruttori sono vere per i finalizzatori e viceversa, ma le parole significano cose leggermente diverse.
Come C ++, è il distruttore; tuttavia in C # non lo si chiama esplicitamente, viene invocato quando l'oggetto viene raccolto.
Vedi Destructors (Guida per programmatori C #) . Tenere presente, tuttavia, che, diversamente dal C ++, il programmatore non ha alcun controllo su quando viene chiamato il distruttore perché questo è determinato dal Garbage Collector.
~ di solito rappresenta un decostruttore. che viene eseguito proprio prima che un oggetto muoia.