Uvod u Destruktor u C #

U članku Destruktor u C # kao što mu ime kaže, destruktori su metode u C # koje uništavaju objekte. Ako objekti više nisu potrebni, onda se poziva destruktor da uništi te predmete iz klase. Destruktor će automatski pozvati sakupljač smeća i uništiti 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).

Svojstva Destruktora u C #

Slijede svojstva destruktora:

  1. Destruktori ne mogu imati nikakve parametre i modifikatore pristupa.
  2. Svaka klasa trebala bi se sastojati od samo jednog destruktora.
  3. Destruktori se ne mogu preopteretiti ili naslijediti.
  4. Ime destruktora uvijek je isto kao i ime klase i nema vrstu povratka.
  5. Destruktor koristi Finalize metodu i poziva je Garbage Collector kada predmeti više nisu potrebni.
  6. Destruktor slijedi obrnuti obrazac. U destruktoru izvedena klasa naziva se prvo, a zatim osnovna klasa.

Kako destruktor djeluje u C #?

Evo nekoliko primjera koji pokazuju kako to funkcionira u C #.

Primjer 1

Kodirati:

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

U gornjem primjeru, parametrizirani konstruktor se inicijalizira s imenom i dobi parametra gdje je ovo ključna riječ koja se odnosi na varijable klase. Nakon toga se stvara destruktor s istim imenom kao i ime klase i simbol ~. U glavnoj metodi postoji objekt osobe iz razreda. Nakon što osoba dobije ime i dob, predmeti se više ne trebaju. Tako se naziva destruktor koji uništava predmete i raspoređuje njihove uspomene.

Izlaz:

Primjer 2

Kodirati:

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

Ovaj je primjer gotovo jednak prethodnom primjeru, ali u ovom primjeru postoje dva objekta u glavnoj metodi. Kao što znamo, konstruktor pokreće svaki predmet, a ista se stvar primjenjuje i za destruktor. U ovom se slučaju destruktor poziva dva puta i raspoređuje memoriju svakog objekta.

Izlaz:

Primjer 3

Kodirati:

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

U gornjem primjeru definirana je roditeljska klasa koja ima destruktor. Tada dječja klasa nasljeđuje roditeljsku klasu, a sastoji se od destruktora. Tako dječji destruktor automatski zove destruktor baze.

U konstruktorima se prvo zove osnovni konstruktor. Na primjer, ako imamo baznu klasu A koju nasljeđuje klasa B, pa se u slučaju konstruktora klasa A naziva prvo, a zatim klasa B. Međutim, u slučaju destruktora klasa B (izvedena klasa) naziva se prvo prije klase A ( osnovna klasa).

Drugi primjer izvršenja naloga: -

Kodirati:

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

Izlaz:

Kao što vidite, u početku se zove treći konstruktor, a slijedi drugi i prvi.

Primjer 4

Kodirati:

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

Izlaz:

Destruktor raspoređuje memoriju objekta ako im nije potrebna na kraju programa. Ali ponekad ako koristimo GC.Collect () usred izvođenja programa, on će uništiti objekte u sredini i dodijeliti memoriju tih objekata. Destruktor se može nazvati implicitno ili eksplicitno. Ali nema potrebe eksplicitno uništavati predmete jer C # osigurava odvoz smeća. Međutim, kad završite s upravljanim resursima, morat ćete ih izričito osloboditi. Nema potrebe za pozivanjem ili slučajem upravljanih resursa. Za rukovanje neupravljanim resursima koristite destruktor. Skupljač smeća nazvat će destruktor jer se sastoji od popisa objekata koji imaju destruktor. Dakle, kad god se neki objekt stvori ili uništi, taj se popis ažurira. Ako u redu stoji neki predmet, skuplja ga smeće nakon što destruktor izvrši.

Zaključak

Glavna svrha destruktora je osloboditi pamćenje predmeta nakon njihovog izvršenja. Dakle, u destruktoru se izvršavaju različite radnje poput oporavka prostora, oslobađanja mrežnih resursa i zaključavanja resursa itd. Destruktori se trebaju koristiti za oslobađanje neupravljanih resursa, a ne upravljanih resursa.

Preporučeni članak

Ovo je vodič za Destructor u C #. Ovdje ćemo raspraviti uvod, svojstva kao i primjere razarača u C #. Možete i proći naše druge predložene članke da biste saznali više -

  1. Uvod u Destructor na Javi
  2. Nasljeđivanje u C # | Top 4 vrste
  3. Kopiraj konstruktor u C # (primjeri)
  4. Što je Multithreading u C #? | prednosti
  5. Destruktor na Pythonu (Prednosti s primjerom)
  6. Pristupite modifikatorima na PHP-u
  7. Vrste konstruktora u C # s implementacijom koda
  8. Stvaranje i metode multithreadinga u C #

Kategorija: