Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 20506|Răspunde: 1

[Sursă] C# Deep Dive - Destructori

[Copiază linkul]
Postat pe 17.08.2018 13:54:43 | | |
Distrugătoarele sunt rar folosite în C#, așa că mulți oameni au uitat de ele, deși sunt de puțin folos și inutile de studiat.

Unu.        Caracteristicile distrugătoarelor:

Destructorii pot exista doar în clase, nu în structuri; Distrugătorul nu poate avea niciun modificator, inclusiv modificatori de control de acces, modificatori statici, modificatori abstracti, modificatori virtuali etc.; Destructorul nu are parametri, ceea ce înseamnă că nu poate exista suprasarcină.

Doi.        Când să chemi distrugătorul:

Distrugătorul este chemat atunci când obiectul este reciclat de colectorul de gunoi, dar colectorul are o caracteristică: este leneș,
Nu reciclează variabila imediat după ce a ieșit din scop și durata de viață, ci doar când consideră că este potrivit, de obicei când memoria este limitată. De exemplu:

După ce metoda btn_Click returnează, de ar trebui să fie terminat, dar distrugătorul său nu este apelat, indicând că colectorul de gunoi nu l-a reciclat; Când închizi formularul, distrugătorul este executat, indicând că la finalul programului, colectorul de gunoi este forțat cu reticență să-l recicleze (^-^).
Desigur, putem folosi GC.Collect() pentru a forța reciclarea:

Când dai click pe btn1, de1 și noul Demo() sunt terminate și distrugătorul este apelat.
de2 nu și-a expirat încă perioada de viață, deci chiar dacă se apelează metoda GC.Collect, nu va fi reciclată; când btn1_Click revine, de2 și-a expirat perioada de viață, dar din cauza lenenei colectorului, tot nu este reciclată; Abia când btn2 apelează metoda GC.Collect de2 este recuperată și distrugătorul său este apelat.

O modalitate de a preveni apelurile destructorului este implementarea interfeței IDisposable, care definește o metodă unică: Dispose().
Acest lucru previne apelarea destructorului intern, ceea ce înseamnă că, dacă te plictisești, poți implementa această interfață fără să chemi GC.SuppressFinalize(^-^), ceea ce este lipsit de sens deoarece nu blochează distrugătorul:

Acum distrugătorul lui de1 nu va mai fi chemat.

Trei.        Esența distrugătorului:

Un distrugător este, în esență, o metodă care ia forma:

De obicei credem că distrugătoarele pot fi chemate doar de sistem, nu de programatorii înșiși, dar acest lucru nu este pe deplin adevărat, iar distrugătoarele pot fi numite explicit, până la urmă, este doar o metodă:

Distrugătoarele nu sunt necesare decât dacă resursele neadministrate sunt deschise în clasă





Precedent:C# Distinct deduplicează condiționat obiectele
Următor:Mesaj excepție: "StrongTypingException: IsPrima...
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com