I distruttori sono raramente usati in C#, quindi molte persone li hanno dimenticati, anche se sono di poca utilità e sono inutili da studiare.
Uno. Caratteristiche dei distruttori:
I Distruttori possono esistere solo in classi, non in strutture; Il distruttore non può avere modificatori, inclusi modificatori di controllo accesso, modificatori statici, astratti, modificatori virtuali, ecc.; Il distruttore non ha parametri, il che significa che non può esserci sovraccarico.
Due. Quando chiamare il distruttore:
Il distruttore viene chiamato quando l'oggetto viene riciclato dal netturbine, ma il netturbine ha una caratteristica: è pigro, Non ricicla la variabile immediatamente dopo che ha lasciato l'ambito e la durata della vita, ma solo quando ritiene opportuna, di solito quando la memoria è limitata. Per esempio:
Dopo che il metodo btn_Click tornato, de dovrebbe essere terminato, ma il suo distruttore non viene chiamato, indicando che il raccoglitore dei rifiuti non lo ha riciclato; Quando chiudi il modulo, il distruttore viene eseguito, indicando che alla fine del programma il netturbine è costretto a riciclarlo (^-^). Naturalmente, possiamo chiamare GC.Collect() per forzare il riciclo:
Quando clicchi su btn1, de1 e nuovo Demo() vengono terminati e viene chiamato il distruttore. de2 non ha ancora scaduto il suo periodo di vita, quindi anche se viene chiamato il metodo GC.Collect, non verrà riciclato; quando il btn1_Click ritorna, de2 ha scaduto il suo periodo di vita, ma a causa della pigrizia del raccoglitore dei rifiuti, non viene ancora riciclato; Solo quando btn2 chiama il metodo GC.Collect il de2 viene recuperato e viene chiamato il suo distruttore.
Un modo per prevenire le chiamate di distruttore è implementare l'interfaccia IDisposable, che definisce un metodo unico: Dispose(). Questo impedisce che il destructor venga chiamato internamente, il che significa che se ti annoi, puoi implementare questa interfaccia senza chiamare GC.SuppressFinalize(^-^), che è privo di significato perché non blocca il destructor:
Ora il distruttore di de1 non verrà chiamato.
Tre. L'essenza del distruttore:
Un distruttore è essenzialmente un metodo che assume la forma di:
Di solito pensiamo che i distruttori possano essere chiamati solo dal sistema, non dai programmatori stessi, ma questo non è del tutto vero, e i distruttori possono anche essere chiamati esplicitamente, dopotutto, è solo un metodo:
I Distruttori non sono necessari a meno che nella classe non vengano aperte risorse non gestite
|