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 "Пётр"