Introduktion till Destructor i C #

I artikeln Destructor i C # som namnet antyder är destruktorer metoderna i C # som förstör föremålen. Om föremålen inte längre krävs, kallas förstöraren att förstöra dessa föremål från klassen. Förstöraren kommer att påkalla automatiskt av skräpfångaren och förstör föremål.

Syntax:

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 representeras av ~ (tilde).

Egenskaper hos Destructor i C #

Följande är destruktorns egenskaper:

  1. Destruktorer kan inte ha några parametrar och åtkomstmodifierare.
  2. Varje klass bör endast bestå av en förstörare.
  3. Destruktorer kan inte överbelastas eller ärvas.
  4. Destruktornamn är alltid detsamma som klassnamnet och har ingen returtyp.
  5. Destructor använder Finalize-metoden och åberopas av Garbage Collector när objekt inte längre krävs.
  6. Destruktorn följer det omvända mönstret. I destruktorn kallas den härledda klassen först och sedan basklass.

Hur fungerar förstöraren i C #?

Här är några exempel som visar hur det fungerar i C #.

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

I exemplet ovan initialiseras den parametrerade konstruktorn med parameternamn och ålder där detta är ett nyckelord som hänvisar till klassvariabler. Därefter skapas förstöraren med samma namn som klassnamnet och symbolen ~. I huvudmetoden finns det ett objekt för klasspersonen. Efter att ha fått en persons namn och ålder krävs inte längre föremål. Så kallas destruktor som förstör objekten och avdelar deras minnen.

Produktion:

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

Detta exempel är nästan samma som föregående exempel, men i det här exemplet finns det två objekt i huvudmetoden. Som vi vet kör konstruktören för varje objekt och samma sak tillämpas också på förstörare. I detta fall kallas förstöraren två gånger och avdelar minnet för varje objekt.

Produktion:

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

I exemplet ovan definieras moderklassen som har en förstörare. Då ärver barnklassen förälderklass och består också av en förstörare. Så barnförstöraren kallar automatiskt basförstöraren.

I konstruktörer kallas baskonstruktören först. Om vi ​​till exempel har basklass A som ärvs av klass B så i händelse av konstruktör klass A kallas först och sedan klass B. I fallet med destruktor klass B (härledd klass) kallas först före klass A ( basklass).

Ett annat exempel på utförande av order: -

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

Produktion:

Som ni ser kallas den tredje konstruktören initialt följt av den andra och den första.

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

Produktion:

Destructor allokerar objektets minne om de inte behövs i slutet av programmet. Men ibland om vi använder GC.Collect () i mitten av programutförandet kommer det att förstöra objekt i mitten och avdela minnet för dessa objekt. Destructor kan kallas implicit eller uttryckligen. Men det finns inget behov av att förstöra föremålen uttryckligen eftersom C # tillhandahåller skräpuppsamling. Men när du är klar med de icke hanterade resurserna måste du frigöra dem uttryckligen. Det behövs ingen anrop eller fall av hanterade resurser. Använd destruktor för att hantera obekväma resurser. Garbage Collector kommer att kalla destructor eftersom den består av en lista över föremål som har en destruktor. Så när ett objekt skapas eller förstörs uppdateras listan. Om det finns ett föremål i kön, samlas det in av avfallssamlaren efter att förstöraren har kört.

Slutsats

Destruktörens huvudsakliga syfte är att frigöra minnet av föremål efter deras körning. Så det finns olika åtgärder som utförs i destruktorn som att återställa utrymmet, släppa nätverksresurser och resurslås, etc. Destruktorer bör användas för att frigöra obehandlade resurser snarare än hanterade resurser.

Rekommenderad artikel

Detta har varit en guide till Destructor i C #. Här diskuterar vi introduktionen, egenskaper såväl som exempel på Destructor i C #. Du kan också gå igenom våra andra föreslagna artiklar för att lära dig mer -

  1. Introduktion till Destructor i Java
  2. Arv i C # | Topp 4 typer
  3. Kopiera konstruktör i C # (exempel)
  4. Vad är multithreading i C #? | fördelar
  5. Destructor i Python (fördelar med exempel)
  6. Få åtkomst till modifierare i PHP
  7. Typer av konstruktörer i C # med kodimplementering
  8. Skapande och metoder för multithreading i C #

Kategori: