Sobes.tech
Junior — Middle

V čom sa líšia referenčné typy od hodnotových typov v C# a aké sú ich hlavné rozdiely v používaní?

sobes.tech AI

Odpoveď od AI

V C# sú typy rozdelené na hodnotové typy (value types) a referenčné typy (reference types).

Hodnotové typy priamo ukladajú údaje. Príklady: int, double, struct. Pri priraďovaní alebo odovzdaní do metódy sa kopíruje samotná hodnota, teda sa vytvorí nezávislá kópia.

Referenčné typy ukladajú odkaz na objekt v pamäti (na halde). Príklady: class, string, pole. Pri priraďovaní sa kopíruje iba odkaz, nie objekt, takže niekoľko premenných môže odkazovať na ten istý objekt.

Hlavné rozdiely:

  • Uloženie: hodnotové typy sú zvyčajne na zásobníku, referenčné na halde.
  • Kopírovanie: hodnotové typy sa kopírujú hodnotou, referenčné odkazom.
  • Správanie pri zmene: zmena hodnotového typu neovplyvní iné kópie, zmena objektu referenčného typu sa odrazí vo všetkých odkazoch.

Príklad:

int a = 5;
int b = a; // kópia hodnoty
a = 10; // a zostane 5

class Osoba { public string Meno; }
Osoba p1 = new Osoba { Meno = "Иван" };
Osoba p2 = p1; // kópia odkazu
p2.Meno = "Пётр"; // p1.Meno sa tiež zmení na "Пётр"