Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 20506|Svare: 1

[Kilde] C# Deep Dive - Destructors

[Kopier lenke]
Publisert på 17.08.2018 13:54:43 | | |
Destruktorer brukes sjelden i C#, så mange har glemt dem, selv om de er lite nyttige og ubrukelige å studere.

Én.        Kjennetegn ved destruktører:

Destruktører kan bare eksistere i klasser, ikke strukturer; Destruktøren kan ikke ha noen modifikatorer, inkludert tilgangskontrollmodifikatorer, statiske modifikatorer, abstrakte modifikatorer, virtuelle modifikatorer osv.; Destruktoren har ingen parametere, noe som betyr at det ikke kan være noen overbelastning.

To.        Når man skal kalle destruktøren:

Destruktoren kalles når objektet resirkuleres av søppelsamleren, men søppelsamleren har en egenskap, den er lat,
Den resirkulerer ikke variabelen umiddelbart etter at den har forlatt omfanget og levetiden, men bare når den mener det er passende, vanligvis når hukommelsen er trang. For eksempel:

Etter at metoden btn_Click returnerer, skal de avsluttes, men dens destruktør kalles ikke, noe som indikerer at søppelsamleren ikke resirkulerte den; Når du lukker skjemaet, utføres destruktoren, noe som indikerer at søppelsamleren motvillig blir tvunget til å resirkulere det (^-^).
Selvfølgelig kan vi ringe GC.Collect() for å tvinge frem resirkulering:

Når du klikker på btn1, avsluttes de1 og ny Demo() og destruktøren kalles opp.
de2 har ennå ikke utløpt sin levetid, så selv om GC.Collect-metoden kalles, vil den ikke bli resirkulert; når btn1_Click returneres, har de2 utløpt sin levetid, men på grunn av latskapen til søppelsamleren blir den fortsatt ikke resirkulert; Det er ikke før btn2 kaller GC.Collect-metoden at de2 blir gjenvunnet og dens destruktør kalles.

En måte å forhindre destruktorkall på er å implementere IDisposable-grensesnittet, som definerer en unik metode: Dispose().
Dette forhindrer at destruktøren kalles internt, noe som betyr at hvis du kjeder deg, kan du implementere dette grensesnittet uten å kalle GC.SuppressFinalize(^-^), som er meningsløst fordi det ikke blokkerer destruktøren:

Nå vil ikke destruktøren av de1 bli kalt.

Tre.        Essensen av ødeleggeren:

En destruktør er i hovedsak en metode som har formen av:

Vanligvis tror vi at destruktorer bare kan kalles av systemet, ikke av programmererne selv, men dette er ikke helt sant, og destruktorer kan også kalles eksplisitt, tross alt er det bare en metode:

Destruktører er ikke påkrevd med mindre uforvaltede ressurser åpnes i klassen





Foregående:C# Distinkt betinget dedupliserer objekter
Neste:Unntaksmelding: "StrongTypingUnntak: IsPrima...
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com