Junior — Middle
Magyarázza el, mik azok az adatsorok, amelyek memóriában tárolják az objektumokra mutató hivatkozásokat, és miben különböznek az értéktípusoktól.
sobes.tech MI
Válasz az MI-től
C#-ban az adattípusokat érték típusokra (value types) és referencia típusokra (reference types) osztják.
-
Referencia típusok a változóban nem magukat az adatokat, hanem egy hivatkozást (mutatót) tárolnak arra a memória területre, ahol az objektum adatai találhatók. Példák: osztályok (
class), sztringek (string), tömbök. -
Érték típusok közvetlenül a változóban tárolják az adatokat. Példák: struktúrák (
struct), felsorolások (enum), alapvető típusok (int,boolstb.).
Különbségek:
- Érték típusok hozzárendelésekor magukat az adatokat másolják, referencia típusoknál pedig a hivatkozást másolják.
- A referencia típusok a kezelt heap-en helyezkednek el, míg az érték típusok általában a veremben vagy más objektumokban.
- Egy referencia típuson végzett módosítás más referencia által is látható ugyanarra az objektumra, míg az érték típusok másolatai függetlenek.
Példa:
class Person { public string Name; }
struct Point { public int X, Y; }
Person p1 = new Person { Name = "Alice" };
Person p2 = p1; // referencia másolása
p2.Name = "Bob";
Console.WriteLine(p1.Name); // "Bob"-ot fog kiírni — mindkettő ugyanarra az objektumra mutat
Point pt1 = new Point { X = 1, Y = 2 };
Point pt2 = pt1; // adatok másolása
pt2.X = 10;
Console.WriteLine(pt1.X); // 1-et fog kiírni — a másolatok függetlenek