Каква е разликата между конструктор и деструктор в C #?


Отговор 1:

C # няма деструктори, има финализатори, което е различно.

По същество конструктор е това, което се нарича от ключовата дума „new“, а на езици, които ги имат, деструкторите се извикват от ключовата дума „delete“ (или когато обектът излезе извън обхвата).

Финализаторът, от друга страна, се нарича от събирача на боклук - известно време след_ обектът излезе или обхват (технически, когато няма повече указатели към него, които също не са „извън обхвата).

Две важни неща, които трябва да отбележите за финализаторите:

  • Нямате как да знаете точно кога ще бъде извиканТрябва да внимавате какво правите във финализатор - други обекти ib от същия клас може би вече са били събрани боклук. Трябва да докосвате само неуправляеми препратки във финализатор.

Ако искате / имате нужда от нещо по-близо до деструктор в C #, имате интерфейс IDisposable, който предоставя метод; "Изхвърлете".

C # има специална ключова дума „using“, която декларира обект в обхват и гарантира, че методът Dispose се извиква.

Този метод трябва също да разпорежда всички IDisposable обекти, които класът на изпълнение притежава.

Ако класът държи неуправляеми обекти, трябва да създадете претоварване на метода Dispose, който приема булев параметър. Този метод трябва да разпорежда всички безпилотни референции и ако параметърът bool е истина, той също трябва да разпорежда всички IDisposable обекти. След това трябва да създадете финализатор, който извиква Dispose (false), за да гарантира освобождаването на неуправляемите ресурси в случай, че методът на разпореждане никога не е бил извикан. Редовният Dispose трябва да извика Dispose (true), а също и GC.SurpressFinalize (), тъй като финализирането няма да е необходимо (това гарантира, че обектът се събира боклук по-бързо и помага за предотвратяване на грешки във финализатора)


Отговор 2:

Конструктор и деструктор са специални функции член на клас във всеки език на програмиране като c # или Java. Функциите на тези членове имат име, същото като име на клас и се извиква, когато създаваме обект на клас.

По принцип конструктор се използва за инициализиране на данни членове на клас, а деструктор се използва за унищожаване на обекти или освобождаване на паметта, заети от обекта.

Една реална употреба на конструктор е да инициализира членовете на данни със стойности по подразбиране и затова имаме конструктор по подразбиране.

Например всеки път, когато създаваме имейл, който бих бил от всеки домейн като Gmail, yahoo или Microsoft, получаваме някои имейли по подразбиране в нашата пощенска кутия, което означава, че тези имейли са стойности по подразбиране.

За да го разберете по-добре, считайте Gmail за клас.

клас Gmail
{
 низ съобщение;
 обществено Gmail (стриктно потребителско име)
 {
   message = „добре дошли в Gmail“ + потребителско име
 }
}
В основна функция
Gmail g1 = нов Gmail („Shinchan.gupta“);
Gmail g2 = нов Gmail („aching.gupta“);

Сега, когато ще създадем нов имейл идентификатор, това означава, че създаваме нов обект на Gmail. И ще инициализира членовете на данните за съобщения със стойности по подразбиране за целия обект и затова всеки потребител на gmail получава едно и също съобщение във входящата поща и коя поща по подразбиране можете да кажете.

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

С проста дума, когато използвате конструктор, той разпределя памет, а когато използвате деструктор, освобождава разпределената памет.