Érték- és referenciatípusok

A .NET keretrendszerben két alapvetően eltérő típussal találkozhatunk. Az érték típusok (ilyen például az int, a byte, vagy a char) a veremmemóriában jönnek létre, és helyük automatikusan felszabadul, amikor a deklaráló kódblokk véget ér, vagyis nincs szükségük a szemétgyűjtő szolgáltatásaira. Ha értékadásban használjuk őket, akkor nem egy rájuk mutató referencia, hanem tényleges értékük másolódik át. Minden egyes érték típusú változóhoz saját, önálló memóriaterület tartozik, vagyis az egyik változón végzett művelet egyetlen másik változó tartalmát sem változtathatja meg. Saját magunk is létrehozhatunk érték szerinti típusokat a „struct” kulcsszóval. Ilyen struktúra például az int típushoz tartozó System.Int32 is, amely az osztályokhoz hasonlóan adatmezőket és metódusokat is tartalmazhat.

A referenciatípusok nem magát az adatot, hanem egy memóriacímre való hivatkozást tárolnak. Egy memóriacímre több hivatkozás is mutathat, tehát egy referencián (vagyis az általa mutatott objektumon) végzett műveletek a többi referenciát is érintik. A referenciatípusokat a new operátorral hozzuk létre, és azok a szemétgyűjtő (GC) által kezelt memóriába kerülnek (vagyis a felügyelt heap-re). Amikor az értékadásokban referenciatípusokat használunk, mindig csak a referencia értéke másolódik át, a valódi objektumhoz nem nyúlunk hozzá.

Valamennyi érték és referenciatípus elérhető System.Object osztályú referencia segítségével. Ha az érték szerinti típust referencián keresztül érjük el, akkor a fordító olyan kódot hoz létre, amely a típusnak megfelelő memóriát a heap-en foglalja le, és átmásolja ide a változó tartalmát a veremből. Ezt az eljárást „Boxing”-nak (dobozolásnak) nevezzük.



Word To HTML Converter