Introduksjon til Destructor i C #

I artikkelen Destructor in C # som navnet antyder er destruktorer metodene i C # som ødelegger gjenstandene. Hvis gjenstandene ikke lenger er nødvendige, blir destruktoren kalt til å ødelegge objektene fra klassen. Destruktoren påkaller seg automatisk av søppelsamleren og ødelegger gjenstander.

syntaks:

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

Destructor er representert med ~ (tilde).

Egenskaper til Destructor i C #

Følgende er egenskapene til destructor:

  1. Destruktører kan ikke ha noen parametere og tilgangsmodifiserere.
  2. Hver klasse skal bestå av bare en ødelegger.
  3. Destruktører kan ikke overbelastes eller arves.
  4. Destruktorenavn er alltid det samme som klassens navn og har ingen returtype.
  5. Destructor bruker Finalize-metoden og påberopes av Garbage Collector når det ikke lenger er behov for gjenstander.
  6. Destruktoren følger det omvendte mønsteret. I destruktor kalles den avledede klassen først og deretter baseklasse.

Hvordan fungerer destruktør i C #?

Her er noen eksempler som viser hvordan det fungerer i C #.

Eksempel 1

Kode:

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

I eksemplet over initialiseres den parameteriserte konstruktøren med parameternavn og alder der dette er et nøkkelord som refererer til klassevariabler. Etter det blir destruktoren opprettet med samme navn som klassens navn og symbol ~. I hovedmetoden er det et objekt av klassepersonen. Etter å ha fått en persons navn og alder, er det ikke lenger behov for gjenstander. Så det blir kalt destructor som ødelegger gjenstandene og avdeler minnene deres.

Produksjon:

Eksempel 2

Kode:

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

Dette eksemplet er nesten det samme som det forrige eksemplet, men i dette eksemplet er det to objekter i hovedmetoden. Som vi vet, kjører konstruktør for alle gjenstander, og det samme brukes også til destruktør. I dette tilfellet blir destruktoren tilkalt to ganger og avdeler minnet til hvert objekt.

Produksjon:

Eksempel 3

Kode:

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

I eksemplet over er foreldreklassen definert som har en ødelegger. Da arver barneklassen foreldreklasse og består av en ødelegger også. Så barnet destructor kaller automatisk destruktøren.

Hos konstruktører kalles grunnkonstruktøren først. For eksempel, hvis vi har baseklasse A som er arvet av klasse B så i tilfelle konstruktør klasse A kalles først og deretter klasse B. Imidlertid, i tilfelle destruktorklasse B (avledet klasse) kalles først før klasse A ( grunnklasse).

Et annet eksempel på ordreutførelse: -

Kode:

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

Produksjon:

Som du kan se, kalles den tredje konstruktøren innledningsvis etterfulgt av den andre og den første.

Eksempel 4

Kode:

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

Produksjon:

Destructor tildeler objektets minne hvis de ikke er påkrevd på slutten av programmet. Men noen ganger hvis vi bruker GC.Collect () i midten av programutførelsen, vil det ødelegge objekter i midten og tildele minnet til disse objektene. Destructor kan kalles implisitt eller eksplisitt. Men det er ikke nødvendig å ødelegge gjenstandene eksplisitt, da C # gir søppelinnsamling. Når du er ferdig med de ikke-administrerte ressursene, må du imidlertid frigjøre dem eksplisitt. Det er ikke nødvendig å ringe eller tilfelle forvaltede ressurser. Bruk destructor for å håndtere ubehandlede ressurser. Garbage Collector vil kalle destruktor da den består av en liste over objekter som har en destruktor. Så når et objekt opprettes eller ødelegges, blir listen oppdatert. Hvis det er en gjenstand i køen, blir den samlet inn av søppelsamleren etter at ødeleggeren er henrettet.

Konklusjon

Hovedformålet med ødeleggeren er å frigjøre minnet om gjenstander etter henrettelsen. Så det er forskjellige handlinger utført i destruktoren, som å gjenvinne plassen, frigjøre nettverksressurser og ressurslåser, etc. Destruktorer bør brukes til å frigjøre ikke-administrerte ressurser i stedet for administrerte ressurser.

Anbefalt artikkel

Dette har vært en guide til Destructor i C #. Her diskuterer vi introduksjonen, egenskaper samt eksempler på Destructor i C #. Du kan også gå gjennom andre foreslåtte artikler for å lære mer -

  1. Introduksjon til Destructor i Java
  2. Arv i C # | Topp 4 typer
  3. Copy Constructor i C # (eksempler)
  4. Hva er multithreading i C #? | Fordeler
  5. Destructor in Python (fordeler med eksempel)
  6. Få tilgang til modifikatorer i PHP
  7. Typer konstruktør i C # med kodeimplementering
  8. Oppretting og metoder for multithreading i C #