Sissejuhatus C # hävitajasse

Nagu nimigi ütleb artiklis C C hävitaja, on C # meetodis hävitajad objektid hävitavad. Kui objekte enam ei vajata, kutsutakse hävitaja need objektid klassist hävitama. Hävitaja kutsub prügivedaja automaatselt ja hävitab objektid.

Süntaks:

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ävitajat esindab ~ (tilde).

C hävitaja omadused

Hävitaja omadused on järgmised:

  1. Destruktoritel ei saa olla parameetreid ega juurdepääsu modifikaatoreid.
  2. Igas klassis peaks olema ainult üks hävitaja.
  3. Hävitajaid ei saa üle koormata ega pärandada.
  4. Hävitaja nimi on alati sama kui klassi nimi ja sellel pole tagastamise tüüpi.
  5. Hävitaja kasutab meetodit Lõpptöötlemine ja prügikoguja kutsub selle välja siis, kui objekte enam ei vajata.
  6. Hävitaja järgib vastupidist mustrit. Hävitajas nimetatakse tuletatud klassi esimeseks ja seejärel põhiklassiks.

Kuidas hävitaja töötab C # -s?

Siin on mõned näited, mis näitavad, kuidas see C #-s töötab.

Näide nr 1

Kood:

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

Ülaltoodud näites lähtestatakse parametriseeritud konstruktor parameetri nime ja vanusega, kus see on klassimuutujatele viitav märksõna. Pärast seda luuakse hävitaja sama nimega, mis klassi nimi ja sümbol ~. Põhimeetodi puhul on tegemist klassi inimese objektiga. Pärast inimese nime ja vanuse saamist pole esemeid enam vaja. Nii kutsutakse hävitajat, kes hävitab objektid ja eraldab nende mälestused.

Väljund:

Näide 2

Kood:

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

See näide on peaaegu sama kui eelmine näide, kuid selles näites on põhimeetodis kaks objekti. Nagu me teame, töötab konstruktor iga objekti juures ja sama asi kehtib ka hävitaja jaoks. Sel juhul helistatakse hävitajale kaks korda ja eraldatakse iga objekti mälu.

Väljund:

Näide 3

Kood:

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

Ülaltoodud näites on määratletud vanemklass, millel on hävitaja. Siis pärib lasteklass vanemate klassi ja koosneb ka hävitajast. Nii et lastehävitaja helistab automaatselt alushävitajaks.

Konstruktorites nimetatakse kõigepealt aluskonstruktorit. Näiteks kui meil on põhiklass A, mis on päritud klassi B järgi, siis konstruktori korral nimetatakse klassi A ja siis klassi B. Kuid hävitaja puhul nimetatakse klassi B (tuletatud klass) enne klassi A ( põhiklass).

Veel üks näide tellimuse täitmise kohta: -

Kood:

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

Väljund:

Nagu näete, kutsutakse algselt kolmandat konstruktorit, millele järgneb teine ​​ja esimene.

Näide 4

Kood:

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

Väljund:

Destructor eraldab objekti mälu, kui neid pole programmi lõpus vaja. Kuid mõnikord, kui kasutame programmi täitmise keskel rakendust GC.Collect (), hävitab see keskel olevad objektid ja eraldab nende objektide mälu. Hävitajat võib nimetada kaudselt või kaudselt. Kuid pole vaja objekte otseselt hävitada, kuna C # pakub prügivedu. Kui olete aga haldamata ressurssidega lõpetanud, peate need selgesõnaliselt vabastama. Pole vaja helistada ega hallata ressursse. Kasutage haldamata ressursside käsitsemiseks hävitajat. Prügikoguja helistab hävitajale, kuna see koosneb objektide loendist, millel on hävitaja. Nii et iga objekti loomisel või hävitamisel värskendatakse seda nimekirja. Kui järjekorras on mõni objekt, kogub selle pärast hävitaja täitmist prügikoguja.

Järeldus

Hävitaja peamine eesmärk on vabastada objektide mälu pärast nende teostamist. Nii et hävitajas teostatakse erinevaid toiminguid, nagu ruumi taastamine, võrguressursside ja ressursilukkude vabastamine jne. Destruktoreid tuleks kasutada mitte hallatavate ressursside, vaid hallatavate ressursside vabastamiseks.

Soovitatav artikkel

See on olnud C # hävitaja juhend. Siin käsitleme C # sissejuhatust, omadusi ja hävitaja näiteid. Lisateavet leiate ka meie muudest soovitatud artiklitest -

  1. Sissejuhatus Java hävitajasse
  2. Pärimine C # | 4 parimat tüüpi
  3. Kopeeri konstruktor C #-s (näited)
  4. Mis on C # mitmekorruseline? | Eelised
  5. Destruktor Pythonis (eelised näitega)
  6. Juurdepääs modifikaatoritele PHP-s
  7. C # konstruktori tüübid koos koodirakendusega
  8. Mitmekeermelise loomine ja meetodid C # -s

Kategooria: