Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 20506|Svar: 1

[Källa] C# Deep Dive - Destructors

[Kopiera länk]
Publicerad på 2018-08-17 13:54:43 | | |
Destruktorer används sällan i C#, så många har glömt bort dem, även om de är till liten nytta och värdelösa att studera.

Ett.        Egenskaper hos destruktorer:

Destruktorer kan endast existera i klasser, inte strukturer; Destruktorn kan inte ha några modifierare, inklusive åtkomstkontrollmodifierare, statiska modifierare, abstrakta modifierare, virtuella modifierare, etc.; Destruktorn har inga parametrar, vilket innebär att det inte kan förekomma någon överbelastning.

Två.        När ska destruktorn ringas:

Destruktorn anropas när objektet återvinns av sopsamlaren, men sopsamlaren har en egenskap, den är lat,
Den återanvänder inte variabeln direkt efter att den lämnat scope och livslängd, utan bara när den tycker att det är lämpligt, vanligtvis när minnet är knappt. Till exempel:

Efter att metoden btn_Click returnerar ska de avslutas, men dess destruktor anropas inte, vilket indikerar att sopsamlaren inte återvann den; När du stänger formuläret körs destruktorn, vilket indikerar att sopsamlaren motvilligt tvingas återvinna det i slutet av programmet (^-^).
Självklart kan vi kalla GC.Collect() för att tvinga fram återvinning:

När du klickar på btn1 avslutas de1 och nya Demo() och destruktorn anropas.
de2 har ännu inte gått ut sin livslängd, så även om GC.Collect-metoden anropas kommer den inte att återvinnas; när btn1_Click återvänder har de2 gått ut, men på grund av sopsamlarens lathet återvinns den fortfarande inte; Det är inte förrän btn2 anropar GC.Collect-metoden som de2 återvinns och dess destruktor anropas.

Ett sätt att förhindra destruktoranrop är att implementera gränssnittet IDisposable, som definierar en unik metod: Dispose().
Detta förhindrar att destruktorn anropas internt, vilket innebär att om du är uttråkad kan du implementera detta gränssnitt utan att anropa GC.SuppressFinalize(^-^), vilket är meningslöst eftersom det inte blockerar destruktorn:

Nu kommer destruktorn för de1 inte att anropas.

Tre.        Kärnan i förstöraren:

En destruktor är i huvudsak en metod som tar formen av:

Vanligtvis tror vi att destruktorer bara kan anropas av systemet, inte av programmerarna själva, men detta är inte helt sant, och destruktorer kan också kallas explicit, det är ju bara en metod:

Destruktorer krävs inte om inte ohanterade resurser öppnas i klassen





Föregående:C# Distinkt villkorligt deduplicblar objekt
Nästa:Undantagsmeddelande: "StrongTypingException: IsPrima...
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com