Sobes.tech
Junior

Aký je rozdiel medzi referenčnými a hodnotovými typmi?

sobes.tech AI

Odpoveď od AI

Rozdiely v spôsobe ukladania a prenosu údajov:

  • Hodnotové typy (Value Types):

    • Sú uložené priamo tam, kde boli deklarované (na zásobníku alebo vo vnútri inštancie hodnotového typu).
    • Pri priraďovaní alebo prenose hodnotou sa vytvorí kópia hodnoty.
    • Zahŕňajú primitívne typy (int, float, bool atď.), štruktúry (struct) a enumy (enum).
    • Sú uzavreté (sealed) a nemôžu byť dediči.
  • Referenčné typy (Reference Types):

    • Sú uložené na halde. Premenná obsahuje nie hodnotu, ale odkaz na adresu na halde.
    • Pri priraďovaní alebo prenose hodnotou sa kopíruje iba odkaz, nie objekt sám.
    • Zahŕňajú triedy (class), rozhrania (interface), delegáty (delegate) a polia (array).
    • Môžu podporovať dedičnosť.
    • Zberač odpadkov spravuje uvoľnenie pamäti pre objekty referenčného typu, na ktoré už nie sú aktívne odkazy.
// Príklad hodnotového typu (struct)
struct Point
{
    public int X;
    public int Y;
}

// Príklad referenčného typu (class)
class Circle
{
    public int Radius;
}
Charakteristika Typy hodnoty Typy referenčného typu
Miesto uloženia Zásobník alebo vo vnútri inštancie hodnotového typu Hald
Prenos/priradenie Kópia hodnoty Kópia odkazu
Dedičnosť Nie Áno
Správa pamäti Automatická (zásobník) Zberač odpadkov