Деструкторите рядко се използват в C#, затова много хора са ги забравили, макар че са малко полезни и безполезни за изучаване.
Едно. Характеристики на разрушителите:
Разрушителите могат да съществуват само в класове, не в структури; Деструкторът не може да има никакви модификатори, включително модификатори за контрол на достъпа, статични модификатори, абстрактни модификатори, виртуални модификатори и др.; Деструкторът няма параметри, което означава, че не може да има претоварване.
Две. Кога да се извика разрушителя:
Деструкторът се извиква, когато обектът се рециклира от събирача на боклук, но събирачът на боклук има характеристика – той е мързелив, Той не рециклира променливата веднага след като е напуснала обхвата и живота, а само когато прецени, че е подходяща, обикновено когато паметта е ограничена. Например:
След като методът btn_Click се върне, de трябва да бъде прекратен, но неговият деструктор не се извиква, което показва, че събирачът на отпадъци не го е рециклирал; Когато затворите формуляра, деструкторът се изпълнява, което показва, че в края на програмата събирачът на боклук е принуден неохотно да го рециклира (^-^). Разбира се, можем да извикаме GC.Collect(), за да принудим рециклирането:
Когато кликнеш btn1, de1 и новият Demo() се прекратяват и се извиква деструкторът. de2 все още не е изтекъл жизненият си период, така че дори и да се извика методът GC.Collect, той няма да бъде рециклиран; когато btn1_Click се върне, de2 е изтекъл от своя жизнен период, но поради мързела на събирача на отпадъци, пак не се рециклира; Не е до момента, в който btn2 извиква метода GC.Collect, тогава de2 се възстановява и се призовава неговият деструктор.
Един от начините да се предотврати извикване на деструктор е да се реализира интерфейсът IDisposable, който дефинира уникален метод: Dispose(). Това предотвратява вътрешното извикване на деструктора, което означава, че ако ви е скучно, можете да реализирате този интерфейс без да извиквате GC.SuppressFinalize(^-^), което е безсмислено, защото не блокира деструктора:
Сега разрушителят на de1 няма да бъде извикан.
Три. Същността на разрушителя:
Деструктор е по същество метод, който приема формата на:
Обикновено мислим, че деструкторите могат да бъдат извикани само от системата, а не от самите програмисти, но това не е напълно вярно, и деструкторите могат да се наричат и изрично, все пак това е просто метод:
Деструкторите не са необходими, освен ако в класа не се открият неуправляеми ресурси
|