Junior
Jaký je rozdíl mezi referenčními a hodnotovými typy?
sobes.tech AI
Odpověď od AI
Rozdíly ve způsobu ukládání a přenosu dat:
-
Hodnotové typy (Value Types):
- Ukládají se přímo tam, kde jsou deklarovány (na zásobníku nebo uvnitř instance hodnotového typu).
- Při přiřazení nebo předání hodnotou se vytvoří kopie hodnoty.
- Zahrnují primitivní typy (int, float, bool atd.), struktury (struct) a výčty (enum).
- Jsou uzavřené (sealed) a nemohou být děděny.
-
Referenční typy (Reference Types):
- Ukládají se na haldě. Proměnná obsahuje nikoliv hodnotu, ale odkaz na adresu na haldě.
- Při přiřazení nebo předání hodnotou se kopíruje pouze odkaz, nikoliv objekt sám.
- Zahrnují třídy (class), rozhraní (interface), delegáty (delegate) a pole (array).
- Mohou podporovat dědičnost.
- Sběrač odpadků spravuje uvolnění paměti pro objekty referenčního typu, na které již nejsou aktivní odkazy.
// Příklad hodnotového typu (struct)
struct Point
{
public int X;
public int Y;
}
// Příklad referenčního typu (class)
class Circle
{
public int Radius;
}
| Charakteristika | Hodnotové typy | Referenční typy |
|---|---|---|
| Místo uložení | Zásobník nebo uvnitř instance hodnotového typu | Hald |
| Přenos/Přiřazení | Kopie hodnoty | Kopie odkazu |
| Dědičnost | Ne | Ano |
| Správa paměti | Automatická (zásobník) | Sběrač odpadků |