Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 20506|Risposta: 1

[Fonte] C# Immersione Profonda - Distruttori

[Copiato link]
Pubblicato su 17/08/2018 13:54:43 | | |
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





Precedente:C# Distinti deduplica condizionalmente gli oggetti
Prossimo:Messaggio eccezione: "StrongTypingException: IsPrima...
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com