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ă
|