Objektumok halála

Keresés
Hírlevél
 
ASPC#C++CSSDelphiFlashJavaJavaScriptPascalPerlPHPPythonuniPaaSVisual BasicVisual C++  »    
A sorozat további cikkei:
szerző: Hatvany Csaba, idő: 2003.09.15., értékelés: 4 (6 szavazat)
  Kapcsolódó fórum Felvétel kedvencekhez Küldés emailben
.NET sorozatunk legújabb része a memória az objektumok "halálának", azaz megsemmisítésének részleteivel ismerteti az olvasót. Bemutatja milyen funkciót töltenek be a destruktorok a .NET keretrendszerben, miként intézi az objektumok megsemmisítését a szemétgyűjtő, és milyen szokatlan eseményekkel találkozhatnak a fejlesztők.

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.


Figyelem! Új .NET levelezőlista indult. Iratkozz fel most!