Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 20506|Atsakyti: 1

[Šaltinis] C# giluminis nardymas - destruktoriai

[Kopijuoti nuorodą]
Paskelbta 2018-08-17 13:54:43 | | |
Destruktoriai C# naudojami retai, todėl daugelis žmonių apie juos pamiršo, nors jie mažai naudingi ir nenaudingi mokytis.

Vienas.        Destruktorių charakteristikos:

Destruktoriai gali egzistuoti tik klasėse, o ne struktūrose; Destruktorius negali turėti jokių modifikatorių, įskaitant prieigos kontrolės modifikatorius, statinius modifikatorius, abstrakčius modifikatorius, virtualius modifikatorius ir kt.; Destruktorius neturi parametrų, o tai reiškia, kad negali būti perkrovos.

Du.        Kada paskambinti destruktoriui:

Destruktorius vadinamas, kai daiktą perdirba šiukšlių surinkėjas, tačiau šiukšlių surinkėjas turi savybę, jis yra tingus,
Jis neperdirba kintamojo iš karto po to, kai jis išeina iš taikymo srities ir gyvavimo laiko, bet tik tada, kai mano, kad tai tinkama, paprastai kai atmintis yra įtempta. Pavyzdžiui:

Po btn_Click grąžinimo metodo de turėtų būti nutrauktas, tačiau jo destruktorius nevadinamas, nurodant, kad šiukšlių surinkėjas jo neperdirbo; Uždarius formą, vykdomas destruktorius, nurodantis, kad programos pabaigoje šiukšlių surinkėjas nenoriai priverstas ją perdirbti (^-^).
Žinoma, galime paskambinti GC.Collect(), kad priverstume perdirbti:

Spustelėjus btn1, de1 ir naujas Demo() nutraukiami ir iškviečiamas destruktorius.
de2 dar nepasibaigė savo gyvavimo laikas, todėl net jei bus vadinamas GC.Collect metodas, jis nebus perdirbamas; kai btn1_Click grįžta, de2 pasibaigė savo gyvavimo laikas, tačiau dėl šiukšlių surinkėjo tingumo jis vis tiek nėra perdirbamas; Tik tada, kai btn2 iškviečia GC.Collect metodą, de2 susigrąžinamas ir jo destruktorius iškviečiamas.

Vienas iš būdų užkirsti kelią destruktoriaus iškvietimams yra įdiegti IDisposable sąsają, kuri apibrėžia unikalų metodą: Dispose().
Tai neleidžia destruktoriui iškviesti viduje, o tai reiškia, kad jei jums nuobodu, galite įdiegti šią sąsają nekviesdami GC.SuppressFinalize(^-^), o tai beprasmiška, nes neblokuoja destruktoriaus:

Dabar de1 naikintojas nebus kviečiamas.

Trys.        Destruktoriaus esmė:

Destruktorius iš esmės yra metodas, kuris yra toks:

Paprastai mes manome, kad destruktorius gali iškviesti tik sistema, o ne patys programuotojai, tačiau tai nėra visiškai tiesa, o destruktorius taip pat galima vadinti aiškiai, juk tai tik metodas:

Destruktoriai nereikalingi, nebent klasėje atidaryti nevaldomi ištekliai





Ankstesnis:C# Distinct sąlygiškai pašalina objektų dublikatus
Kitą:Išimties pranešimas: "StrongTypingException: IsPrima...
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com