Úvod do Destructor v C #

V článku Destructor in C #, jak název napovídá, jsou destruktory metody v C #, které ničí objekty. Pokud již objekty nejsou vyžadovány, je vyvolán destruktor, aby tyto objekty zničil ze třídy. Destruktor bude automaticky vyvolán sběratelem odpadu a ničí objekty.

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

Destruktor je reprezentován ~ (vlnovka).

Vlastnosti destruktoru v C #

Vlastnosti destruktoru jsou následující:

  1. Destruktory nemohou mít žádné parametry a modifikátory přístupu.
  2. Každá třída by měla obsahovat pouze jeden destruktor.
  3. Destruktory nemohou být přetíženy nebo zděděny.
  4. Název destruktoru je vždy stejný jako název třídy a nemá žádný návratový typ.
  5. Destruktor používá metodu Finalize a je vyvolán programem Garbage Collector, když objekty již nejsou vyžadovány.
  6. Destruktor následuje obrácený vzor. V destruktoru se odvozená třída nazývá první a poté základní třída.

Jak Destructor pracuje v C #?

Zde je několik příkladů, které ukazují, jak to funguje v C #.

Pří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());
)
)
)

Ve výše uvedeném příkladu je parametrizovaný konstruktor inicializován názvem parametru a věkem, kde se jedná o klíčové slovo odkazující na proměnné třídy. Poté je destruktor vytvořen se stejným názvem jako název třídy a symbol ~. V hlavní metodě existuje objekt třídní osoby. Po získání jména a věku osoby již nejsou předměty zapotřebí. Nazývá se destruktor, který ničí objekty a rozděluje jejich paměti.

Výstup:

Pří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 příklad je téměř stejný jako v předchozím příkladu, ale v tomto příkladu jsou v hlavní metodě dva objekty. Jak víme, konstruktor běží pro každý objekt a totéž platí i pro destruktor. V tomto případě je destruktor volán dvakrát a delokuje paměť každého objektu.

Výstup:

Pří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();
)
)
)

Ve výše uvedeném příkladu je definována nadřazená třída, která má destruktor. Potom podřízená třída zdědí nadřazenou třídu a skládá se také z destruktoru. Dětský destruktor tedy automaticky volá základní destruktor.

V konstruktorech se základní konstruktér nazývá první. Například pokud máme základní třídu A, která je zděděna třídou B, takže v případě konstruktoru se třída A nazývá první a potom třída B. V případě destruktoru se však třída B (odvozená třída) nazývá první před třídou A ( základní třída).

Další příklad provedení 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ýstup:

Jak vidíte, třetí konstruktor se nazývá zpočátku následovaný druhým a prvním.

Pří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ýstup:

Destruktor delokuje paměť objektu, pokud to není vyžadováno na konci programu. Ale někdy, když použijeme GC.Collect () uprostřed provádění programu, zničí objekty uprostřed a delokuje paměť těchto objektů. Destruktor lze nazvat implicitně nebo explicitně. Není však nutné ničit objekty explicitně, protože C # poskytuje sběr odpadu. Až však budete s nespravovanými prostředky hotovi, budete je muset explicitně uvolnit. Není třeba volat ani spravovat zdroje. Pro manipulaci s nespravovanými prostředky použijte destruktor. Sběratel odpadu bude volat destruktor, protože se skládá ze seznamu objektů, které mají destruktor. Takže kdykoli je objekt vytvořen nebo zničen, je tento seznam aktualizován. Pokud je ve frontě nějaký objekt, je po spuštění destruktoru sbírán sběratelem odpadu.

Závěr

Hlavním účelem destruktoru je uvolnit paměť objektů po jejich provedení. V destruktoru jsou tedy prováděny různé akce, jako je obnova prostoru, uvolnění síťových prostředků a blokování zdrojů atd. Destruktory by měly být použity k uvolnění nespravovaných prostředků, nikoli k spravovaným prostředkům.

Doporučený článek

Toto byl průvodce Destructor v C #. Zde diskutujeme úvod, vlastnosti a příklady destruktoru v C #. Další informace naleznete také v dalších navrhovaných článcích -

  1. Úvod do Destructor v Javě
  2. Dědičnost v C # | Top 4 typy
  3. Kopírovat konstruktor v C # (příklady)
  4. Co je multithreading v C #? | Výhody
  5. Destruktor v Pythonu (výhody s příkladem)
  6. Přístup modifikátory v PHP
  7. Typy konstruktoru v jazyce C # s implementací kódu
  8. Tvorba a metody multithreadingu v C #

Kategorie: