Sobes.tech
Junior — Middle

Kuo skiriasi nuorodų tipai nuo reikšmių tipų C# ir kokie yra jų pagrindiniai naudojimo skirtumai?

sobes.tech AI

Atsakymas iš AI

C# kalboje tipai skirstomi į reikšmės tipus (value types) ir nuorodų tipus (reference types).

Reikšmės tipai saugo duomenis tiesiogiai. Pavyzdžiai: int, double, struct. Priskiriant ar perduodant į metodą, kopijuojama pati reikšmė, tai yra, sukuriama nepriklausoma kopija.

Nuorodų tipai saugo nuorodą į objektą atmintyje (heap). Pavyzdžiai: class, string, masyvai. Priskiriant, kopijuojama tik nuoroda, ne objektas, todėl keli kintamieji gali nurodyti į tą patį objektą.

Pagrindiniai skirtumai:

  • Saugojimas: reikšmės tipai dažniausiai stack'e, nuorodų tipai — heap'e.
  • Kopijavimas: reikšmės tipai kopijuojami pagal reikšmę, nuorodų tipai — pagal nuorodą.
  • Elgsena keičiant: reikšmės tipo keitimas nepaveikia kitų kopijų, nuorodų tipo objekto keitimas atsispindi visuose nuorodose.

Pavyzdys:

int a = 5;
int b = a; // reikšmės kopija
a = 10; // a liks 5

class Asmuo { public string Vardas; }
Asmuo p1 = new Asmuo { Vardas = "Иван" };
Asmuo p2 = p1; // nuorodos kopija
p2.Vardas = "Пётр"; // p1.Vardas taip pat pasikeis į "Пётр"