Sobes.tech
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ů