Финализиране

Финализатор в обектно-ориентирани езици за програмиране, които използват механизма за събиране на боклука, специален метод, извикан от средата на изпълнение преди обектът да бъде премахнат от колектора.

Определение

Финализаторът е метод на клас, който автоматично се извиква от времето на изпълнение в интервала между момента, в който обект от този клас е разпознат от събирача на боклук като неизползван и момента, в който обектът е изтрит (освобождава паметта, която заема). Финализаторът за конкретен обект винаги се изпълнява, след като програмата спре да използва дадения обект и преди паметта, заета от обекта, да бъде освободена. Удобно е да се предположи, че финализаторът се извиква точно преди обектът да бъде премахнат от паметта, въпреки че това обикновено не е гарантирано.

Използвайки

Външно финализаторът е подобен на деструктор на клас, но в действителност ефектът и обхватът на тези методи са значително различни. Разликата се дължи на факта, че моментът, в който е извикан финализаторът, за разлика от деструктора, не е кодиран твърдо.

Докато деструкторите много често се използват за освобождаване на оскъдни системни ресурси (като достъп до файлове или хардуер), използвани от обект, използването на финализатори по този начин обикновено не се препоръчва. Разбира се, финализаторът може да затвори файла или да каже на операционната система, че устройството вече не се използва, но това би било лошо решение. Проблемът е, че от момента, в който спрете да използвате обекта до момента на извикване на финализатора, може да премине неопределено време и през цялото това време ресурсите, заети от обекта, няма да бъдат използвани, а ще останат заети.

В резултат на това използването на финализатори е много по-ограничено. Те обикновено се използват за освобождаване на ресурси с ниска стойност и също така за сигнализиране, че обектът е готов за изтриване. Езиците, събирани от боклука, използват модела на дизайна "dispose", за да освободят ресурси. Езикът за програмиране C # поддържа образа "dispose" имплицитно чрез интерфейса IDisposable и ключовата дума using .