Introduktion til Destructor i C #

I artiklen Destructor i C #, som navnet antyder, er destruktorer metoderne i C #, der ødelægger objekterne. Hvis objekterne ikke længere er påkrævet, kaldes destruktoren til at ødelægge disse objekter fra klassen. Destruktoren påberåber sig automatisk af affaldsopsamleren og ødelægger genstande.

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 repræsenteret ved ~ (tilde).

Egenskaber ved Destructor i C #

Følgende er egenskaberne ved destructor:

  1. Destruktorer kan ikke have nogen parametre og adgangsmodifikatorer.
  2. Hver klasse skal kun bestå af en destruktor.
  3. Destruktorer kan ikke overbelastes eller nedarves.
  4. Destruktorens navn er altid det samme som klassens navn og har ingen returtype.
  5. Destructor bruger Finalize-metoden og påberåbes af Garbage Collector, når der ikke længere kræves genstande.
  6. Destructor følger det modsatte mønster. I destruktor kaldes den afledte klasse først og derefter baseklasse.

Hvordan fungerer Destructor i C #?

Her er nogle eksempler, der 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 ovenstående eksempel initialiseres den parametriserede konstruktør med parameternavn og alder, hvor dette er et nøgleord, der henviser til klassevariabler. Efter denne oprettes destruktor med samme navn som klassens navn og symbol ~. I hovedmetoden er der et objekt fra klassens person. Når du har fået en persons navn og alder, kræves der ikke længere genstande. Så kaldes destruktor, der ødelægger genstande og affordeler deres minder.

Produktion:

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 eksempel er næsten det samme som det foregående eksempel, men i dette eksempel er der to objekter i hovedmetoden. Som vi ved kører konstruktør for hvert objekt, og denne samme ting anvendes også til destruktør. I dette tilfælde kaldes destruktoren to gange og tildeler hukommelsen til hvert objekt.

Produktion:

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 ovenstående eksempel defineres forældreklassen, der har en destruktor. Derefter arver barneklassen forældreklasse og består også af en destruktør. Så børnedestruktør kalder automatisk basedestruktoren.

I konstruktører kaldes basiskonstruktøren først. For eksempel, hvis vi har baseklasse A, der er arvet af klasse B, så i tilfælde af konstruktør klasse A kaldes først og derefter klasse B. I tilfælde af destruktorklasse B (afledt klasse) kaldes dog først før klasse A ( baseklasse).

Et andet eksempel på ordreudfø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();
)
)
)

Produktion:

Som du kan se, kaldes den tredje konstruktør oprindeligt efterfulgt af den anden 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();
)
)
)

Produktion:

Destructor tildeler objektets hukommelse, hvis de ikke er påkrævet i slutningen af ​​programmet. Men nogle gange hvis vi bruger GC.Collect () midt i programudførelsen, vil det ødelægge objekter i midten og fordele hukommelsen til disse objekter. Destructor kan kaldes implicit eller eksplicit. Men det er ikke nødvendigt at ødelægge objekterne eksplicit, da C # leverer affaldsindsamling. Når du er færdig med de ikke-administrerede ressourcer, skal du imidlertid frigøre dem eksplicit. Det er ikke nødvendigt at kalde eller sage om administrerede ressourcer. Brug destructor til håndtering af ikke-administrerede ressourcer. Garbage Collector kalder destruktor, da den består af en liste over genstande, der har en destruktor. Så når et objekt oprettes eller ødelægges, opdateres listen. Hvis der er et objekt i køen, indsamles det af affaldsopsamleren, efter at destruktoren er henrettet.

Konklusion

Hovedformålet med destruktoren er at frigøre hukommelsen til genstande efter deres henrettelse. Så der er forskellige handlinger, der udføres i destruktoren, såsom at gendanne pladsen, frigive netværkets ressourcer og ressourcelåse osv. Destruktorer skal bruges til at frigive ikke-administrerede ressourcer snarere end administrerede ressourcer.

Anbefalet artikel

Dette har været en guide til Destructor i C #. Her diskuterer vi introduktionen, egenskaber samt eksempler på Destructor i C #. Du kan også gennemgå vores andre foreslåede artikler for at lære mere -

  1. Introduktion til Destructor i Java
  2. Arv i C # | Top 4 typer
  3. Copy Constructor i C # (eksempler)
  4. Hvad er multithreading i C #? | Fordele
  5. Destructor i Python (fordele med eksempel)
  6. Få adgang til modifikatorer i PHP
  7. Konstruktortyper i C # med kodeimplementering
  8. Oprettelse og metoder til multithreading i C #

Kategori: