Destruktory se v C# používají jen zřídka, takže na ně mnoho lidí zapomnělo, i když jsou málo užitečné a k učení zbytečné.
Jedna. Charakteristiky destruktorů:
Destruktoři mohou existovat pouze ve třídách, nikoli ve strukturách; Destruktor nesmí mít žádné modifikátory, včetně modifikátorů řízení přístupu, statických modifikátorů, abstraktních modifikátorů, virtuálních modifikátorů atd.; Destruktor nemá žádné parametry, což znamená, že nemůže dojít k přetížení.
Dva. Kdy zavolat destruktor:
Destruktor se vyvolává, když je předmět recyklován sběračem odpadu, ale sběrač odpadu má vlastnost, že je líný, Proměnnou nerecykluje ihned poté, co opustí rozsah a dobu života, ale pouze tehdy, když to považuje za vhodné, obvykle když je paměť omezená. Například:
Po návratu metody btn_Click by mělo být de ukončeno, ale jeho deštruktor není vyvolán, což znamená, že sběrač odpadu jej nerecykloval; Když formulář zavřete, deštruktor se spustí, což znamená, že na konci programu je garbage collector neochotně nucen ho recyklovat (^-^). Samozřejmě můžeme zavolat GC.Collect() a vynutit recyklaci:
Když kliknete na btn1, de1 a nový Demo() jsou ukončeny a destruktor je vyvolán. de2 ještě nevypršel svou životnost, takže i když je vyvolána metoda GC.Collect, nebude recyklován; když se btn1_Click vrátí, de2 už vypršela, ale kvůli lenosti sběrače odpadu stále není recyklována; Teprve když btn2 zavolá metodu GC.Collect, je de2 znovu získán a jeho destructor je volán.
Jedním ze způsobů, jak zabránit volání destruktoru, je implementace rozhraní IDisposable, které definuje unikátní metodu: Dispose(). To zabraňuje tomu, aby byl destruktor vyvolán interně, což znamená, že pokud se nudíte, můžete toto rozhraní implementovat bez volání GC.SuppressFinalize(^-^), což je bezvýznamné, protože destruktor neblokuje:
Nyní se destruktor de1 nevyvolá.
Tři. Podstata destruktoru:
Destruktor je v podstatě metoda, která má tvar:
Obvykle si myslíme, že destruktory může volat pouze systém, ne samotní programátoři, ale to není úplně pravda, a destruktory lze také explicitně nazývat, koneckonců je to jen metoda:
Destruktory nejsou potřeba, pokud nejsou v třídě otevřeny nespravované zdroje
|