Junior — Middle
Care sunt diferențele dintre tipurile de referință și cele de valoare în C# și care sunt principalele diferențe în utilizare?
sobes.tech AI
Răspuns de la AI
În C#, tipurile sunt împărțite în tipuri de valoare (value types) și tipuri de referință (reference types).
Tipurile de valoare stochează datele direct. Exemple: int, double, struct. La atribuirea sau transmiterea către o metodă, valoarea în sine este copiată, adică se creează o copie independentă.
Tipurile de referință stochează o referință la un obiect în memorie (heap). Exemple: class, string, array-uri. La atribuire, se copiază doar referința, nu obiectul, astfel încât mai multe variabile pot face referire la același obiect.
Principalele diferențe:
- Stocare: tipurile de valoare sunt de obicei pe stivă, tipurile de referință pe heap.
- Copiere: tipurile de valoare sunt copiate prin valoare, cele de referință prin referință.
- Comportament la modificare: modificarea unui tip de valoare nu afectează alte copii, modificarea unui obiect de tip referință se reflectă în toate referințele.
Exemplu:
int a = 5;
int b = a; // copie a valorii
a = 10; // a va rămâne 5
class Persoana { public string Nume; }
Persoana p1 = new Persoana { Nume = "Иван" };
Persoana p2 = p1; // copie a referinței
p2.Nume = "Пётр"; // p1.Nume va deveni și el "Пётр"