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 |