Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 20506|Odpověď: 1

[Zdroj] C# Hluboký ponor - Destructors

[Kopírovat odkaz]
Zveřejněno 17.08.2018 13:54:43 | | |
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





Předchozí:C# Distinct podmíněně deduplikuje objekty
Další:Zpráva o výjimečnosti: "StrongTypingException: IsPrima...
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com