Въведение в Destructor в C #

В статията Destructor in C #, както подсказва името, destructors са методите в C #, които унищожават обектите. Ако обектите вече не се изискват, тогава деструкторът се призовава да унищожи тези обекти от класа. Деструкторът ще извика автоматично от боклука и унищожава обекти.

Синтаксис:

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

Деструкторът е представен от ~ (tilde).

Свойства на Destructor в C #

Следните са свойствата на деструктора:

  1. Деструкторите не могат да имат никакви параметри и модификатори за достъп.
  2. Всеки клас трябва да се състои само от един деструктор.
  3. Деструкторите не могат да бъдат претоварени или наследствени.
  4. Името на деструктора винаги е същото като името на класа и няма тип връщане.
  5. Destructor използва метода Finalize и се извиква от Garbage Collector, когато обектите вече не се изискват.
  6. Destructor следва обратния модел. В деструктора, полученият клас се нарича първо, а след това базов клас.

Как работи Destructor в C #?

Ето няколко примера, които показват как работи в C #.

Пример №1

Код:

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

В горния пример параметризираният конструктор се инициализира с име на параметър и възраст, където това е ключова дума, отнасяща се до променливи от клас. След това се създава разрушителят със същото име като името на класа и символа ~. В основния метод има обект на човека от класа. След получаване на име и възраст на човек, обектите вече не се изискват. Така се нарича деструктор, който унищожава предметите и делегира техните спомени.

изход:

Пример №2

Код:

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

Този пример е почти същият като предишния пример, но в този пример има два обекта в основния метод. Както знаем, конструктор работи за всеки обект и същото това се прилага и за деструктор. В този случай деструкторът се извиква два пъти и де-разпределя паметта на всеки обект.

изход:

Пример №3

Код:

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

В горния пример се дефинира родителският клас, който има деструктор. Тогава детският клас наследява родителския клас и се състои и от деструктор. Така деструкторът за деца автоматично извиква основния разрушител.

При конструкторите основният конструктор се нарича първо. Например, ако имаме базов клас А, който се наследява от клас В, така че в случай на конструктор клас А се нарича първо, а след това клас В. Въпреки това, в случай на деструктор клас В (производен клас) се нарича първо преди клас А ( базов клас).

Друг пример за изпълнение на поръчката: -

Код:

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

изход:

Както можете да видите, първоначалният конструктор се нарича първоначално последван от втория и първия.

Пример №4

Код:

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

изход:

Destructor разпределя паметта на обекта, ако те не са необходими в края на програмата. Но понякога ако използваме GC.Collect () в средата на изпълнение на програмата, тя ще унищожи обекти в средата и де-разпределя паметта на тези обекти. Деструкторът може да бъде извикан неявно или изрично. Но не е необходимо да унищожавате обектите изрично, тъй като C # осигурява събиране на боклука. Когато обаче приключите с неуправляемите ресурси, ще трябва да ги освободите изрично. Не е необходимо да се обаждате или да управлявате ресурси. Използвайте деструктор за работа с неуправляеми ресурси. Garbage Collector ще извика деструктор, тъй като се състои от списък на обекти, които имат деструктор. Така че всеки път, когато обект е създаден или унищожен, този списък се актуализира. Ако в опашката има обект, той се събира от колектора за боклук след изпълнение на разрушителя.

заключение

Основната цел на деструктора е да освободи паметта на обектите след тяхното изпълнение. Така че в разрушителя се изпълняват различни действия, като възстановяване на пространството, освобождаване на мрежови ресурси и заключване на ресурси и др. Разрушителите трябва да се използват за освобождаване на неуправляеми ресурси, а не на управлявани ресурси.

Препоръчителен член

Това е ръководство за Destructor в C #. Тук обсъждаме въвеждането, свойствата, както и примерите на Destructor в C #. Можете да разгледате и другите ни предложени статии, за да научите повече -

  1. Въведение в Destructor в Java
  2. Наследяване в C # | Топ 4 вида
  3. Копиране на конструктора в C # (Примери)
  4. Какво е многопоточност в C #? | Предимства
  5. Destructor в Python (Предимства с пример)
  6. Достъп Модификатори в PHP
  7. Видове конструктор в C # с изпълнение на код
  8. Създаване и методи за многопоточност в C #