C #: n tuhoajan esittely

Kuten nimestä voi päätellä, artikkelissa Destructor in C #, kuten destructorit ovat C #: n menetelmät, jotka tuhoavat objektit. Jos esineitä ei enää tarvita, hävittäjää kutsutaan tuhoamaan nämä esineet luokasta. Tuhoaja kutsuu jätteen kerääjän automaattisesti ja tuhoaa esineet.

Syntaksi:

class Demo
(
// other methods
~Demo() // destructor
(
// your code
)
)
C# destructor is a shortcut of Finalize( ) method. So when you declare destructor
~Demo() // destructor
(
// your code
)
C# compiler will translate it to:
protected override void Finalize()
(
try
(
// your code
)
finally
(
base.Finalize();
)
)

Hävittäjää edustaa ~ (tilde).

Tuhoajan ominaisuudet C #: ssä

Seuraavat ominaisuudet ovat tuhoaja:

  1. Tuhoajilla ei voi olla parametreja ja käyttöoikeuksien muuntajia.
  2. Jokaisessa luokassa tulisi olla vain yksi tuhoaja.
  3. Tuhoajia ei voi ylikuormittaa eikä periä.
  4. Hävittäjän nimi on aina sama kuin luokan nimi, eikä sillä ole paluutyyppiä.
  5. Hävittäjä käyttää viimeistelymenetelmää ja jätehuoltaja kutsuu sen esille, kun esineitä ei enää tarvita.
  6. Tuhoaja noudattaa käänteistä mallia. Tuhoajassa johdettua luokkaa kutsutaan ensiksi ja sitten perusluokkaksi.

Kuinka tuhoaja toimii C #: ssä?

Tässä on joitain esimerkkejä, jotka osoittavat, kuinka se toimii C #: ssä.

Esimerkki # 1

Koodi:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Destructor
(
class person
(
//variables
public string name;
public int age;
public person(string name, int age) //parametrized constructor
(
this.name = name;
this.age = age;
)
public string getName()
(
return this.name;
)
public int getAge()
(
return this.age;
)
~person() // destructor
(
Console.WriteLine("Destructor has been invoked");
)
)
class Program
(
// main method
static void Main(string() args)
(
person Details = new person("Joe", 28);
Console.WriteLine(Details.getName());
Console.WriteLine(Details.getAge());
)
)
)

Yllä olevassa esimerkissä parametrisoitu konstruktori alustetaan parametrin nimellä ja iällä, kun tämä on avainsana, joka viittaa luokan muuttujiin. Sen jälkeen hävittäjä luodaan samalla nimellä kuin luokan nimellä ja symbolilla ~. Päämenetelmässä on luokan henkilön esine. Henkilön nimen ja iän saamisen jälkeen esineitä ei enää tarvita. Joten häntä kutsutaan tuhoajaksi, joka tuhoaa esineet ja vapauttaa niiden muistot.

lähtö:

Esimerkki 2

Koodi:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
anmespace Destructor
(
class person
(
// variables
public string name;
public int age;
public person(string name, int age) // parameterized constructor
(
this.name = name;
this.age = age;
)
public string getName()
(
return this.name;
)
public int getAge()
(
return this.age;
)
~person() //destructor
(
Console.WriteLine("Descructor has been invoked");
)
)
class Program
(
// Main method
static void Main(string() args)
(
person Details = new person("Joe", 28); // first object
person Details1 = new person("John", 20);
Console.WriteLine(Details.getName());
Console.WriteLine(Details.getAge());
Console.WriteLine(Details1.getName());
Console.WriteLine(Details1.getAge());
)
)
)

Tämä esimerkki on melkein sama kuin edellinen esimerkki, mutta tässä esimerkissä päämenetelmässä on kaksi objektia. Kuten tiedämme, rakentaja ajaa jokaiselle esineelle ja samaa asiaa sovelletaan myös tuhoajaan. Tällöin hävittäjää kutsutaan kaksi kertaa ja allokoidaan kunkin kohteen muisti.

lähtö:

Esimerkki 3

Koodi:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Destructor
(
public class Parent
(
~Parent() // base destructor
(
Console.WriteLine("Parent.~Parent()");
)
)
public class Child : Parent
(
~Child() // derived destructor
(
Console.WriteLine("Child.~Child()");
)
)
public class MainClass
(
static void Main()
(
Child child = new Child();
)
)
)

Yllä olevassa esimerkissä määritetään pääluokka, jolla on tuhoaja. Sitten lapsiluokka perii vanhempien luokan ja koostuu myös tuhoajasta. Joten lastenhävittäjä kutsuu automaattisesti perusturvaajaksi.

Rakentajissa perusrakentajaa kutsutaan ensin. Esimerkiksi, jos meillä on perusluokka A, jonka perii luokka B, niin konstruktorin tapauksessa luokkaa A kutsutaan ensin ja sitten luokkaksi B. Kuitenkin tuhoajan luokassa B (johdettu luokka) kutsutaan ensin ennen luokkaa A ( perusluokka).

Toinen esimerkki tilauksen toteuttamisesta: -

Koodi:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Destructor
(
class Tree
(
~Tree()
(
System.Console.WriteLine("This is the first destructor");
)
)
class Branch: Tree
(
~Branch()
(
System.Console.WriteLine("This is the second destructor");
)
)
class Flower: Branch
(
~Flower()
(
System.Console.WriteLine("This is the third destructor");
)
)
class Test
(
static void Main()
(
Flower f= new Flower();
)
)
)

lähtö:

Kuten huomaat, kolmas rakentaja kutsutaan aluksi toisen ja ensimmäisen.

Esimerkki 4

Koodi:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Destructor
(
class Example
(
public Example()
(
// constructor
Console.WriteLine("Object Created");
)
// Destructor
~Example()
(
Console.WriteLine("Object Destroyed");
)
)
class Program
(
public static void Sample()
(
Example ex = new Example();
)
static void Main(string() args)
(
Sample();
GC.Collect();
Console.ReadLine();
)
)
)

lähtö:

Hävittäjä osoittaa objektin muistin uudelleen, jos niitä ei vaadita ohjelman lopussa. Mutta joskus jos käytämme GC.Collect () -ohjelman keskellä ohjelmaa, se tuhoaa keskellä olevat esineet ja osoittaa näiden kohteiden muistin käytöstä. Tuhoaja voidaan kutsua implisiittisesti tai eksplisiittisesti. Objekteja ei kuitenkaan tarvitse tuhota nimenomaisesti, koska C # tarjoaa roskien keräyksen. Kun olet valmis käyttämättä hallitsemattomia resursseja, sinun on kuitenkin vapautettava ne nimenomaisesti. Ei tarvitse kutsua tai hallittujen resurssien tapausta. Käytä hävittäjää hallitsemattomien resurssien käsittelemiseen. Roskakori soittaa tuhoajalle, koska se koostuu luettelosta esineistä, joissa on tuhoaja. Joten kun objekti luodaan tai tuhotaan, luettelo päivitetään. Jos jonossa on esine, jätekeräjä kerää sen tuhoajan suorittamisen jälkeen.

johtopäätös

Tuhoajan päätarkoitus on vapauttaa esineiden muisti niiden suorittamisen jälkeen. Joten hävittäjässä suoritetaan erilaisia ​​toimia, kuten tilan palauttaminen, verkkoresurssien ja resurssilukkojen vapauttaminen jne. Hävittäjiä tulisi käyttää vapauttamaan hallitsemattomia resursseja hallittujen resurssien sijaan.

Suositeltava artikkeli

Tämä on opas Destructorille C #: ssä. Tässä keskustellaan johdannosta, ominaisuuksista sekä esimerkkeistä tuhoajasta C #: ssä. Voit myös käydä läpi muiden ehdotettujen artikkeleidemme saadaksesi lisätietoja -

  1. Johdatus Java-tuhoajaan
  2. Perintö C # |: ssa 4 suosituinta tyyppiä
  3. Kopiointirakentaja C #: ssä (esimerkit)
  4. Mikä on monisäikeinen C #: ssä? | edut
  5. Tuhoaja Pythonissa (edut esimerkillä)
  6. Pääsy muokkaimet PHP
  7. C #: n konstruktorityypit koodin toteutuksella
  8. Luominen ja menetelmät monisäikeistämiseen C #: ssä