Deštruktory sa v C# používajú len zriedka, takže na ne mnohí ľudia zabudli, hoci sú málo užitočné a nepoužiteľné na štúdium.
Jeden. Charakteristiky deštruktorov:
Deštruktori môžu existovať iba v triedach, nie v štruktúrach; Deštruktor nemôže mať žiadne modifikátory, vrátane modifikátorov riadenia prístupu, statických modifikátorov, abstraktných modifikátorov, virtuálnych modifikátorov a podobne; Deštruktor nemá žiadne parametre, čo znamená, že nemôže dôjsť k preťaženiu.
Dva. Kedy zavolať deštruktora:
Deštruktor sa volá, keď je predmet recyklovaný zberačom odpadu, ale zberač odpadu má vlastnosť, že je lenivý, Premennú nerecykluje hneď po jej opustení rozsahu a životnosti, ale len vtedy, keď to považuje za vhodné, zvyčajne keď je pamäť obmedzená. Napríklad:
Po návrate metódy btn_Click by sa malo de ukončiť, ale jeho deštruktor sa nevolá, čo naznačuje, že zberač odpadu ho nerecykloval; Keď formulár zatvoríte, deštruktor sa spustí, čo znamená, že na konci programu je garbage collector neochotne nútený ho recyklovať (^-^). Samozrejme, môžeme zavolať GC.Collect(), aby sme vynútili recykláciu:
Keď klikneš na btn1, de1 a nový Demo() sa ukončia a deštruktor sa zavolá. de2 ešte nevypršal svoju životnosť, takže aj keď sa použije metóda GC.Collect, nebude recyklovaný; keď sa btn1_Click vráti, de2 už vypršal svoju životnosť, ale kvôli lenivosti zberača odpadu sa stále nerecykluje; Až keď btn2 zavolá metódu GC.Collect, de2 je znovu získaný a jeho deštruktor zavolaný.
Jedným zo spôsobov, ako zabrániť volaniam destruktora, je implementovať rozhranie IDisposable, ktoré definuje jedinečnú metódu: Dispose(). To zabraňuje internému volaniu deštruktora, čo znamená, že ak sa nudíte, môžete implementovať toto rozhranie bez volania GC.SuppressFinalize(^-^), čo je bezvýznamné, pretože deštruktor neblokuje:
Teraz sa destructor de1 nebude volať.
Tri. Podstata destructora:
Deštruktor je v podstate metóda, ktorá má tvar:
Zvyčajne si myslíme, že deštruktory môže volať iba systém, nie samotní programátori, ale to nie je úplne pravda, a deštruktory možno tiež explicitne volať, veď je to len metóda:
Deštruktory nie sú potrebné, pokiaľ sa v triede neotvoria nespravované zdroje
|