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