See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 20506|Vastuse: 1

[Allikas] C# Sügav sukeldumine - Destructors

[Kopeeri link]
Postitatud 17.08.2018 13:54:43 | | |
Hävitajaid kasutatakse C#-s harva, nii et paljud on neist unustanud, kuigi neist pole eriti kasu ja neid pole võimalik uurida.

Üks.        Hävitajate omadused:

Destruktorid võivad eksisteerida ainult klassides, mitte struktuurides; Destructor ei tohi omada ühtegi modifikaatorit, sealhulgas juurdepääsukontrolli modifikaatoreid, staatilisi modifikaatoreid, abstraktseid modifikaatoreid, virtuaalseid modifikaatoreid jne; Destruktoril puuduvad parameetrid, mis tähendab, et ülekoormust ei saa olla.

Kaks.        Millal kutsuda hävitaja:

Hävitaja kutsutakse siis, kui prügikoguja taaskasutab objekti, kuid prügikogujal on omadus – ta on laisk,
See ei taaskasuta muutujat kohe pärast selle lahkumist ulatusest ja elueast, vaid ainult siis, kui peab seda sobivaks, tavaliselt siis, kui mälu on napp. Näiteks:

Pärast meetodi btn_Click tagasitulekut tuleks de lõpetada, kuid selle hävitajat ei kutsuta, mis viitab sellele, et prügikoguja ei taaskasutanud seda; Kui vormi sulged, käivitatakse destructor, mis näitab, et programmi lõpus on prügikoristaja vastumeelselt sunnitud selle taaskasutama (^-^).
Muidugi võime kutsuda GC.Collect(), et sundida taaskasutust:

Kui klikid btn1, lõpetatakse de1 ja uus Demo() ning destructor kutsutakse välja.
de2 ei ole veel oma eluiga läbi saanud, seega isegi kui kasutatakse GC.Collect meetodit, seda ei taaskasutata; kui btn1_Click naaseb, on de2 oma eluiga lõppenud, kuid prügikoguja laiskuse tõttu seda ikkagi ei taaskasutata; Alles siis, kui btn2 kutsub GC.Collect meetodi, taastatakse de2 ja kutsutakse selle hävitaja.

Üks viis destructori kutsete vältimiseks on IDisposable liidese rakendamine, mis määratleb unikaalse meetodi: Dispose().
See takistab destructori sisemist kutsumist, mis tähendab, et kui sul on igav, saad selle liidese rakendada ilma GC.SuppressFinalize(^-^) kutsumata, mis on mõttetu, sest see ei blokeeri destructorit:

Nüüd ei kutsuta de1 hävitajat.

Kolm.        Hävitaja olemus:

Destruktor on põhimõtteliselt meetod, mis avaldub järgmiselt:

Tavaliselt arvame, et destruktoreid saab kutsuda ainult süsteem ise, mitte programmeerijad ise, kuid see pole päris tõsi ning destruktoreid saab kutsuda ka otseselt, sest see on ju lihtsalt meetod:

Hävitajad ei ole vajalikud, välja arvatud juhul, kui klassis on avatud haldamata ressursse





Eelmine:C# Erinevad tingimuslikult dedlikaatsed objektid
Järgmine:Erandsõnum: "StrongTypeException: IsPrima...
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com