Uvod v Destructor v C #

V članku Destruktor v C #, kot že ime pove, so destruktorji metode v C #, ki uničujejo predmete. Če predmeti niso več potrebni, se potem uniči, da uniči te predmete iz razreda. Zbiralnik smeti sproži samodejno zbiralnik smeti in uniči predmete.

Sintaksa:

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();
)
)

Destruktor je predstavljen s ~ (tilde).

Lastnosti Destruktorja v C #

Sledijo lastnosti destruktorja:

  1. Destruktorji ne morejo imeti nobenih parametrov in modifikatorjev dostopa.
  2. Vsak razred mora biti sestavljen samo iz enega destruktorja.
  3. Destruktorjev ni mogoče preobremeniti ali podedovati.
  4. Ime uničevalca je vedno isto kot ime razreda in nima povratnega tipa.
  5. Destruktor uporablja metodo Finalize in ga prikliče Garbage Collector, kadar predmeti niso več potrebni.
  6. Destruktor sledi obratnemu vzorcu. V destruktorju se izpeljani razred imenuje najprej in nato osnovni razred.

Kako Destruktor deluje v C #?

Tu je nekaj primerov, ki prikazujejo, kako deluje v C #.

Primer # 1

Koda:

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());
)
)
)

V zgornjem primeru je parametriziran konstruktor inicializiran z imenom in starostjo parametra, pri čemer je to ključna beseda, ki se nanaša na spremenljivke razreda. Po tem se ustvari destruktor z istim imenom kot ime razreda in simbol ~. V glavni metodi je predmet osebe razreda. Po pridobitvi imena in starosti osebe predmeti niso več potrebni. Tako se imenuje destruktor, ki uniči predmete in dodeli njihov spomin.

Izhod:

Primer # 2

Koda:

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());
)
)
)

Ta primer je skoraj enak prejšnjemu primeru, vendar sta v tem primeru dva predmeta v glavni metodi. Kot vemo, konstruktor deluje za vsak predmet in ista stvar se uporablja tudi za destruktor. V tem primeru se destruktor pokliče dvakrat in dodeli pomnilnik vsakega predmeta.

Izhod:

Primer # 3

Koda:

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();
)
)
)

V zgornjem primeru je definiran nadrejeni razred, ki ima destruktor. Nato otroški razred podeduje nadrejeni razred in je sestavljen tudi iz destruktorja. Otroški destruktor samodejno pokliče osnovnega uničevalca.

Pri konstruktorjih se najprej imenuje osnovni konstruktor. Na primer, če imamo osnovni razred A, ki ga deduje razred B, se v primeru konstruktorja razred A imenuje najprej in nato razred B. Vendar pa se v primeru destruktorja razred B (izpeljani razred) pokliče najprej pred razredom A ( osnovni razred).

Še en primer izvršitve naročila: -

Koda:

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();
)
)
)

Izhod:

Kot vidite, se najprej pokliče tretji konstruktor, ki mu sledita drugi in prvi.

Primer št. 4

Koda:

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();
)
)
)

Izhod:

Destruktor dodeli pomnilnik predmeta, če jih na koncu programa ni potrebno. Včasih pa, če sredi izvajanja programa uporabimo GC.Collect (), uniči predmete na sredini in dodeli spomin na te predmete. Destruktor lahko pokličemo implicitno ali izrecno. Toda predmetov ni treba izrecno uničiti, ker C # zagotavlja odvoz smeti. Ko končate z neurejenimi viri, jih boste morali izrecno osvoboditi. Ni potrebe, da pokličete ali primera upravljate z viri. Za ravnanje z neurejenimi viri uporabite destruktor. Garbage Collector bo poklical uničevalnik, saj je sestavljen iz seznama predmetov, ki imajo destruktor. Kadar koli predmet ustvarite ali uničite, se seznam posodobi. Če je v čakalni vrsti predmet, ga zbira smeti, potem ko ga uniči.

Zaključek

Glavni namen destruktorja je osvoboditi spomin predmetov po njihovi izvedbi. V destruktorju se torej izvajajo različna dejanja, kot so obnavljanje prostora, sprostitev omrežnih virov in zaklep virov itd. Destruktorje je treba uporabiti za sprostitev neupravljanih virov in ne upravljanih virov.

Priporočeni članek

To je vodnik za Destruktor v C #. Tukaj v C # razpravljamo o uvodu, lastnostih in o primerih Destructorja. Če želite izvedeti več, lahko preberete tudi druge naše predlagane članke -

  1. Uvod v Destructor na Javi
  2. Dedovanje v C # | Najboljše 4 vrste
  3. Kopiraj konstruktor v C # (primeri)
  4. Kaj je Multithreading v C #? | Prednosti
  5. Destruktor v Pythonu (Prednosti s primerom)
  6. Dostop do modifikatorjev v PHP
  7. Vrste konstruktorjev v C # z izvajanjem kode
  8. Ustvarjanje in metode večtirne izdelave v C #