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

Изглед: 20506|Отговор: 1

[Източник] C# Deep Dive - Разрушители

[Копирай линк]
Публикувано в 17.08.2018 г. 13:54:43 ч. | | |
Деструкторите рядко се използват в C#, затова много хора са ги забравили, макар че са малко полезни и безполезни за изучаване.

Едно.        Характеристики на разрушителите:

Разрушителите могат да съществуват само в класове, не в структури; Деструкторът не може да има никакви модификатори, включително модификатори за контрол на достъпа, статични модификатори, абстрактни модификатори, виртуални модификатори и др.; Деструкторът няма параметри, което означава, че не може да има претоварване.

Две.        Кога да се извика разрушителя:

Деструкторът се извиква, когато обектът се рециклира от събирача на боклук, но събирачът на боклук има характеристика – той е мързелив,
Той не рециклира променливата веднага след като е напуснала обхвата и живота, а само когато прецени, че е подходяща, обикновено когато паметта е ограничена. Например:

След като методът btn_Click се върне, de трябва да бъде прекратен, но неговият деструктор не се извиква, което показва, че събирачът на отпадъци не го е рециклирал; Когато затворите формуляра, деструкторът се изпълнява, което показва, че в края на програмата събирачът на боклук е принуден неохотно да го рециклира (^-^).
Разбира се, можем да извикаме GC.Collect(), за да принудим рециклирането:

Когато кликнеш btn1, de1 и новият Demo() се прекратяват и се извиква деструкторът.
de2 все още не е изтекъл жизненият си период, така че дори и да се извика методът GC.Collect, той няма да бъде рециклиран; когато btn1_Click се върне, de2 е изтекъл от своя жизнен период, но поради мързела на събирача на отпадъци, пак не се рециклира; Не е до момента, в който btn2 извиква метода GC.Collect, тогава de2 се възстановява и се призовава неговият деструктор.

Един от начините да се предотврати извикване на деструктор е да се реализира интерфейсът IDisposable, който дефинира уникален метод: Dispose().
Това предотвратява вътрешното извикване на деструктора, което означава, че ако ви е скучно, можете да реализирате този интерфейс без да извиквате GC.SuppressFinalize(^-^), което е безсмислено, защото не блокира деструктора:

Сега разрушителят на de1 няма да бъде извикан.

Три.        Същността на разрушителя:

Деструктор е по същество метод, който приема формата на:

Обикновено мислим, че деструкторите могат да бъдат извикани само от системата, а не от самите програмисти, но това не е напълно вярно, и деструкторите могат да се наричат и изрично, все пак това е просто метод:

Деструкторите не са необходими, освен ако в класа не се открият неуправляеми ресурси





Предишен:C# Различни условно дедуплирани обекти
Следващ:Съобщение за изключение: "StrongTypingException: IsPrima...
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com