Sobes.tech
Junior — Middle

V čem se liší referenční typy od hodnotových typů v C# a jaké jsou jejich hlavní rozdíly v použití?

sobes.tech AI

Odpověď od AI

V C# jsou typy rozděleny na hodnotové typy (value types) a referenční typy (reference types).

Hodnotové typy přímo ukládají data. Příklady: int, double, struct. Při přiřazení nebo předání do metody se kopíruje samotná hodnota, tedy vznikne nezávislá kopie.

Referenční typy ukládají odkaz na objekt v paměti (na haldě). Příklady: class, string, pole. Při přiřazení se kopíruje pouze odkaz, nikoliv objekt, takže několik proměnných může odkazovat na stejný objekt.

Hlavní rozdíly:

  • Uložení: hodnotové typy jsou obvykle na zásobníku, referenční typy na haldě.
  • Kopírování: hodnotové typy se kopírují hodnotou, referenční typy odkazem.
  • Chování při změně: změna hodnotového typu neovlivní ostatní kopie, změna objektu referenčního typu se odrazí ve všech odkazech.

Příklad:

int a = 5;
int b = a; // kopie hodnoty
a = 10; // a zůstane 5

class Osoba { public string Jmeno; }
Osoba p1 = new Osoba { Jmeno = "Иван" };
Osoba p2 = p1; // kopie odkazu
p2.Jmeno = "Пётр"; // p1.Jmeno se také změní na "Пётр"