Úvod do Destructor v C #

V článku Destructor in C #, ako už názov napovedá, deštruktory sú metódy v C #, ktoré ničia objekty. Ak už objekty nie sú potrebné, potom sa volá deštruktor, aby zničil tieto objekty z triedy. Ničiteľ sa spustí automaticky pomocou zberača odpadu a ničí objekty.

syntaxe:

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 reprezentovaný ~ (vlnovka).

Vlastnosti Destructor v C #

Nasledujú vlastnosti deštruktora:

  1. Destruktory nemôžu mať žiadne parametre a modifikátory prístupu.
  2. Každá trieda by mala pozostávať iba z jedného deštruktora.
  3. Destruktory nemôžu byť preťažené alebo zdedené.
  4. Názov ničiteľa je vždy rovnaký ako názov triedy a nemá žiadny návratový typ.
  5. Destruktor používa metódu Finalize a vyvolá ju Garbage Collector, keď už objekty nie sú potrebné.
  6. Destruktor sleduje opačný vzorec. V deštruktore sa odvodená trieda nazýva prvá a potom základná trieda.

Ako Destructor funguje v C #?

Tu je niekoľko príkladov, ktoré ukazujú, ako to funguje v C #.

Príklad č. 1

kód:

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

Vo vyššie uvedenom príklade je parametrizovaný konštruktor inicializovaný názvom parametra a vekom, kde ide o kľúčové slovo odkazujúce na premenné triedy. Potom je deštruktor vytvorený s rovnakým názvom ako názov triedy a symbol ~. V hlavnej metóde je objekt triedy osoby. Po získaní mena a veku osoby už nie sú potrebné žiadne predmety. Nazýva sa deštruktor, ktorý ničí objekty a delokuje ich spomienky.

Výkon:

Príklad č. 2

kód:

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

Tento príklad je takmer rovnaký ako predchádzajúci príklad, ale v tomto príklade sú v hlavnej metóde dva objekty. Ako vieme, konštruktor beží pre každý objekt a to isté platí aj pre deštruktor. V tomto prípade sa deštruktor volá dvakrát a delokuje pamäť každého objektu.

Výkon:

Príklad č. 3

kód:

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

Vo vyššie uvedenom príklade je definovaná rodičovská trieda, ktorá má deštruktor. Potom podradená trieda zdedí rodičovskú triedu a skladá sa tiež z deštruktora. Detský deštruktor teda automaticky volá základný deštruktor.

V konštruktoroch sa prvý konštruktor nazýva prvý. Napríklad, ak máme základnú triedu A, ktorá je zdedená triedou B, tak sa v prípade konštruktora nazýva prvá trieda a potom trieda B. Avšak v prípade deštruktora sa trieda B (odvodená trieda) nazýva prvá pred triedou A ( základná trieda).

Ďalší príklad vykonania objednávky: -

kód:

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ýkon:

Ako vidíte, tretí konštruktor sa nazýva spočiatku, za ktorým nasleduje druhý a prvý.

Príklad č. 4

kód:

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ýkon:

Destruktor delokuje pamäť objektu, ak to nie je potrebné na konci programu. Ale niekedy, keď použijeme GC.Collect () uprostred vykonávania programu, zničí objekty uprostred a delokuje pamäť týchto objektov. Destruktor možno nazvať implicitne alebo explicitne. Nie je však potrebné ničiť objekty explicitne, pretože C # poskytuje zbierku odpadu. Keď však skončíte s nespravovanými prostriedkami, budete ich musieť výslovne uvoľniť. Nie je potrebné volať ani spravovať zdroje. Na manipuláciu s nespravovanými prostriedkami použite destruktor. Zberač odpadu bude volať deštruktor, pretože sa skladá zo zoznamu objektov, ktoré majú deštruktor. Takže pri každom vytvorení alebo zničení objektu sa tento zoznam aktualizuje. Ak je vo fronte nejaký objekt, zbiera ho zberateľ odpadu po vykonaní deštruktora.

záver

Hlavným účelom deštruktora je uvoľniť pamäť objektov po ich vykonaní. V deštruktore sú teda rôzne akcie, ako napríklad obnova priestoru, uvoľnenie sieťových zdrojov a zámkov prostriedkov atď. Destruktory by sa mali používať na uvoľnenie nespravovaných prostriedkov, nie na spravované prostriedky.

Odporúčaný článok

Toto bol sprievodca Destructorom v C #. Tu diskutujeme úvod, vlastnosti a príklady ničiteľa v C #. Viac informácií nájdete aj v ďalších navrhovaných článkoch -

  1. Úvod do Destructor v Jave
  2. Dedičnosť v C # | Top 4 typy
  3. Kopírovanie konštruktora v jazyku C # (príklady)
  4. Čo je multithreading v jazyku C #? | výhody
  5. Destruktor v Pythone (výhody s príkladom)
  6. Modifikátory prístupu v PHP
  7. Typy konštruktorov v jazyku C # s implementáciou kódu
  8. Tvorba a metódy multithreadingu v C #

Kategórie: