| |||
Istenem, elrontották a destruktorokat!
A cikk folyamán többszőr említettem, hogy a használt destruktorok nem is igazi destruktorok, illetve azt, hogy a .NET-ben nem is léteznek C++ értelemben vett destruktorok.
Eljött az idő, hogy ezt a, látszólag súlyos kijelentést, megindokoljam.
Fogaljuk össze röviden a C++-ból ismert dolgokat. Egy osztály konstruktora az osztály nevét viseli, destruktorát ugyanúgy nevezzük, mint a konstruktort, azzal a kiegészítéssel, hogy az osztálynév elé a ~ jelet tesszük. A konstruktort és a destruktort általában kódból hívjuk meg és meghívásuk után közvetlenül végre lesznek hajtva.
C#-ban a dolgok kissé másként vannak. Egy osztály konstruktorát és "destruktorát" ugyanúgy nevezzük, mint a C++-ban, de ha meghívjuk a konstruktort, akkor a new kulcsszót kell alkalmazzuk. A "destruktort" viszont meg se hívhatjuk a kódból: már ez is egy nyomós ok, hogy a C# "destruktorokat" közelebbről megvizsgáljuk.
Egy másik cikkemben szó esett az ILDASM (Intermediate Language Disassembler) programról, amivel egy assemby IL kódját megtekinthetjük. Most is szükségünk lesz erre a programra, amit a FrameworkSDK\Bin mappában találunk ildasm.exe név alatt. Indítsuk el a programot és töltsük be a cikk az első vagy a második részében közölt projekt assemby-jét. A program ablakát az alábbi ábrán látjuk.
Felismerhetjük a myObj osztály name nyilvános tagját, a .ctor névvel jelzett konstruktorát, de a destruktor helyett a Finalize metódust találjuk. Ha kétszer rákattintunk a metódus ikonjára a megjelenő ablakban látjuk a metódus IL kódját és meggyőződhetünk, hogy tényleg a destruktort helyettesíti.


