Metoda finalize to faktycznie trochę taki 'destruktor z C++'
.
Jest ona wywoływana wtedy, kiedy twój obiekt jest 'sprzątany' przez GC. Jeśli masz na przykład klasę 'Plik'
(albo 'PołączenieInternetowe'
etc) to chciałbyś żeby otwarty plik był zawsze poprawnie zamknięty.
Zazwyczaj zakładasz że użytkownik jest porządny, i wywoła jakąś metodę '.Close()'
na pliku . Jeśli jednak tego nie zrobi, chcesz się upewnić że plik będzie poprawnie uwolniony, i właśnie do tego służy metoda finalize() - liczysz że /kiedyś/ zostanie wywołana, więc /kiedyś/ Twój plik będzie zamknięty.
Problem w tym że na metodzie finalize() nie należy polegać, bo może się okazać że zanim GC zdąży zwolnić obiekt, program kończy swoje działanie... Dlatego nadaje się do zwalniania zewnętrznych zasobów, ale raczej nie do sterowania działaniem programu.