Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 20506|Antwoord: 1

[Bron] C# Deep Dive - Destructors

[Link kopiëren]
Geplaatst op 17-08-2018 13:54:43 | | |
Destructors worden zelden gebruikt in C#, dus veel mensen zijn ze vergeten, hoewel ze weinig nut hebben en nutteloos zijn om te bestuderen.

Een.        Kenmerken van destructors:

Destructors kunnen alleen bestaan in klassen, niet in structuren; De destructor mag geen modificatoren hebben, waaronder toegangscontrolemodificatoren, statische modificatoren, abstracte modificatoren, virtuele modificatoren, enzovoort; De destructor heeft geen parameters, wat betekent dat er geen overbelasting kan zijn.

Twee.        Wanneer de destructor moet worden aangeroepen:

De destructor wordt aangeroepen wanneer het object wordt gerecycled door de garbage collector, maar de garbage collector heeft een eigenschap: hij is lui,
Het recyclet de variabele niet direct nadat deze de scope en levensduur heeft verlaten, maar alleen wanneer het denkt dat het passend is, meestal wanneer het geheugen krap is. Bijvoorbeeld:

Nadat de methode btn_Click terugkeert, moet de worden beëindigd, maar de destructor wordt niet aangeroepen, wat aangeeft dat de garbage collector het niet heeft gerecycled; Wanneer je het formulier sluit, wordt de destructor uitgevoerd, wat aangeeft dat de afvalverzamelaar aan het einde van het programma met tegenzin gedwongen wordt het te recyclen (^-^).
Natuurlijk kunnen we GC.Collect() bellen om recycling af te dwingen:

Wanneer je op btn1 klikt, worden de1 en nieuwe Demo() beëindigd en wordt de destructor aangeroepen.
de2 heeft zijn levensduur nog niet verlopen, dus zelfs als de GC.Collect-methode wordt aangeroepen, wordt deze niet gerecycled; wanneer de btn1_Click terugkeert, is de2 zijn levensduur verlopen, maar door de luiheid van de afvalverzamelaar wordt hij nog steeds niet gerecycled; Pas wanneer btn2 de GC.Collect-methode aanroept, wordt de2 teruggewonnen en wordt de destructor ervan aangeroepen.

Een manier om destructoroproepen te voorkomen is het implementeren van de IDisposable-interface, die een unieke methode definieert: Dispose().
Dit voorkomt dat de destructor intern wordt aangeroepen, wat betekent dat als je je verveelt, je deze interface kunt implementeren zonder de GC.SuppressFinalize(^-^ aan te roepen, wat zinloos is omdat het de destructor niet blokkeert:

Nu wordt de destructor van de1 niet meer aangeroepen.

Drie.        De essentie van de vernietiger:

Een destructor is in wezen een methode die de vorm aanneemt als:

Meestal denken we dat destructors alleen door het systeem kunnen worden aangeroepen, niet door de programmeurs zelf, maar dit is niet helemaal waar, en destructors kunnen ook expliciet worden aangeroepen, want het is gewoon een methode:

Destructors zijn niet nodig tenzij onbeheerde resources in de klasse worden geopend





Vorig:C# Distinct conditioneel dedupliceert objecten
Volgend:Uitzonderingsbericht: "StrongTypingException: IsPrima...
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com