Sobes.tech
Junior — Middle

Miben különböznek a referencia típusok a érték típusoktól C#-ban, és mik a fő különbségek a használatukban?

sobes.tech MI

Válasz az MI-től

C#-ban a típusokat érték típusokra (value types) és referencia típusokra (reference types) osztják.

Érték típusok közvetlenül tárolják az adatokat. Példák: int, double, struct. Átadás vagy hozzárendelés esetén maga az érték másolódik, azaz független másolat jön létre.

Referencia típusok egy objektumra mutató hivatkozást tárolnak a memóriában (a heap-en). Példák: class, string, tömbök. Hozzárendeléskor csak a hivatkozás másolódik, nem az objektum, így több változó is ugyanarra az objektumra mutathat.

Fő különbségek:

  • Tárolás: érték típusok általában a veremben, referencia típusok a heap-en.
  • Másolás: érték típusokat értékkel másolunk, referencia típusokat hivatkozással.
  • Viselkedés változtatáskor: érték típus módosítása nem befolyásolja a többi példányt, referencia típus esetén a módosítás minden hivatkozásban megjelenik.

Példa:

int a = 5;
int b = a; // érték másolata
a = 10; // az a továbbra is 5 marad

class Személy { public string Név; }
Személy p1 = new Személy { Név = "Иван" };
Személy p2 = p1; // hivatkozás másolata
p2.Név = "Пётр"; // p1.Név is "Пётр" lesz