Sobes.tech
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, bool stb.).

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