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 į "Пётр"