Tämä artikkeli on konekäännöksen peiliartikkeli, klikkaa tästä siirtyäksesi alkuperäiseen artikkeliin.

Näkymä: 20506|Vastaus: 1

[Lähde] C# Syväsukellus - Tuhoajat

[Kopioi linkki]
Julkaistu 17.8.2018 13.54.43 | | |
Destructoreita käytetään harvoin C#:ssa, joten monet ovat unohtaneet ne, vaikka ne ovat vähäpätöisiä ja hyödyttömiä tutkia.

Yksi.        Tuhoajien ominaisuudet:

Tuhoajat voivat olla olemassa vain luokissa, eivät rakenteissa; Tuhoajalla ei voi olla mitään modifikaattoreita, mukaan lukien kulunvalvontamuokkaajat, staattiset modifikaattorit, abstraktit modifikaattorit, virtuaalimodifikaattorit jne.; Tuhoajalla ei ole parametreja, mikä tarkoittaa, ettei ylikuormitusta voi syntyä.

Kaksi.        Milloin kutsua tuhoaja:

Tuhoaja kutsutaan, kun roskankerääjä kierrättää esineen, mutta jätekerääjällä on ominaisuus: se on laiska,
Se ei kierrätä muuttujaa heti sen jälkeen, kun se on poistunut laajuudesta ja elinkaaresta, vaan vain silloin, kun se katsoo sen sopivaksi, yleensä kun muisti on tiukka. Esimerkiksi:

Kun menetelmä btn_Click palaa, de tulisi lopettaa, mutta sen tuhoajaa ei kutsuta, mikä tarkoittaa, ettei jätekeräijä kierrättänyt sitä; Kun lomakkeen suljetaan, tuhoaja suoritetaan, mikä tarkoittaa, että ohjelman lopussa jätekerääjä joutuu vastahakoisesti kierrättämään sen (^-^).
Tietenkin voimme soittaa GC.Collect():lle pakottaaksemme kierrätyksen:

Kun klikkaat btn1, de1 ja uusi Demo() päättyvät ja tuhoaja kutsutaan.
de2:n elinkaari ei ole vielä päättynyt, joten vaikka GC.Collect -menetelmää kutsuttaisiin, sitä ei kierrätetä; kun btn1_Click palaa, de2:n elinikä on päättynyt, mutta jätehuoltomiehen laiskuuden vuoksi sitä ei silti kierrätetä; Vasta kun btn2 kutsuu GC.Collect-metodin, de2 otetaan takaisin ja sen tuhoaja kutsutaan.

Yksi tapa estää tuhoajakutsut on toteuttaa IDisposable interface, joka määrittelee ainutlaatuisen metodin: Dispose().
Tämä estää destructorin kutsumisen sisäisesti, mikä tarkoittaa, että jos olet tylsistynyt, voit toteuttaa tämän rajapinnan ilman GC.SuppressFinalize(^-^):n kutsumista, mikä on merkityksetöntä, koska se ei estä tuhoajaa:

Nyt de1:n tuhoajaa ei kutsuta.

Kolme.        Tuhoajan olemus:

Tuhoaja on pohjimmiltaan menetelmä, joka ilmenee seuraavasti:

Yleensä ajattelemme, että destruktoreita voi kutsua vain järjestelmä, ei ohjelmoijat itse, mutta tämä ei ole täysin totta, ja destruktoreita voidaan kutsua myös eksplisiittisesti, loppujen lopuksi se on vain metodi:

Tuhoajia ei tarvita, ellei luokassa ole avattu hallitsemattomia resursseja





Edellinen:C# Erilliset objektit deduplikoivat ehdollisesti
Seuraava:Poikkeusviesti: "StrongTypingException: IsPrima...
Vastuuvapauslauseke:
Kaikki Code Farmer Networkin julkaisemat ohjelmistot, ohjelmamateriaalit tai artikkelit ovat tarkoitettu vain oppimis- ja tutkimustarkoituksiin; Yllä mainittua sisältöä ei saa käyttää kaupallisiin tai laittomiin tarkoituksiin, muuten käyttäjät joutuvat kantamaan kaikki seuraukset. Tämän sivuston tiedot ovat peräisin internetistä, eikä tekijänoikeuskiistat liity tähän sivustoon. Sinun tulee poistaa yllä oleva sisältö kokonaan tietokoneeltasi 24 tunnin kuluessa lataamisesta. Jos pidät ohjelmasta, tue aitoa ohjelmistoa, osta rekisteröityminen ja hanki parempia aitoja palveluita. Jos rikkomuksia ilmenee, ota meihin yhteyttä sähköpostitse.

Mail To:help@itsvse.com