Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 20506|Odgovoriti: 1

[Vir] C# Deep Dive - Destructors

[Kopiraj povezavo]
Objavljeno na 17. 08. 2018 13:54:43 | | |
Uničevalci se v C# redko uporabljajo, zato jih je veliko ljudi pozabilo, čeprav so malo uporabni in neuporabni za učenje.

Ena.        Značilnosti uničevalcev:

Uničevalci lahko obstajajo le v razredih, ne v strukturah; Destructor ne sme imeti nobenih modifikatorjev, vključno z modifikatorji za nadzor dostopa, statičnimi modifikatorji, abstraktnimi modifikatorji, virtualnimi modifikatorji itd.; Destruktor nima parametrov, kar pomeni, da ne more biti preobremenitve.

Dva.        Kdaj poklicati uničevalca:

Uničevalec se pokliče, ko zbiralnik odpadkov reciklira predmet, vendar ima zbiralec smeti lastnost, da je len,
Spremenljivke ne reciklira takoj po tem, ko zapusti obseg in življenjsko dobo, ampak le, ko meni, da je to primerno, običajno ko je pomnilnik omejen. Na primer:

Ko metoda btn_Click vrne, je treba de prekiniti, vendar njen uničevalec ni poklican, kar pomeni, da ga zbiralnik smeti ni recikliral; Ko zaprete obrazec, se uničevalec izvrši, kar pomeni, da je na koncu programa zbiralnik smeti prisiljen z odporom ga reciklirati (^-^).
Seveda lahko pokličemo GC.Collect() in prisilimo recikliranje:

Ko klikneš btn1, se de1 in novi Demo() prekineta in destructor se pokliče.
de2 še ni potekel svoje življenjske dobe, zato tudi če je uporabljena metoda GC.Collect, ne bo recikliran; ko se btn1_Click vrne, je de2 že potekel svoj življenjski čas, vendar zaradi lenobe zbiralca smeti še vedno ni recikliran; Šele ko btn2 pokliče metodo GC.Collect, se de2 ponovno pridobi in pokliče njegov destruktor.

Eden od načinov za preprečevanje klicev destruktorjev je implementacija vmesnika IDisposable, ki definira edinstveno metodo: Dispose().
To preprečuje, da bi bil destruktor interno poklican, kar pomeni, da lahko, če vam je dolgčas, implementirate ta vmesnik brez klica GC.SuppressFinalize(^-^), kar je brez pomena, ker ne blokira destruktorja:

Zdaj uničevalec de1 ne bo poklican.

Tri.        Bistvo uničevalca:

Uničevalec je v bistvu metoda, ki ima obliko:

Običajno mislimo, da lahko uničevalce pokliče le sistem, ne pa programerji sami, vendar to ni povsem res, in uničevalce lahko imenujemo tudi eksplicitno, saj gre le za metodo:

Uničevalci niso potrebni, razen če se v razredu odprejo neupravljani viri





Prejšnji:C# Distinct pogojno deduplikira objekte
Naslednji:Izjema sporočila: "StrongTypingException: IsPrima...
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com