Junior — Middle
Qual è la differenza tra tipi di riferimento e tipi di valore in C# e quali sono le principali differenze nel loro utilizzo?
sobes.tech AI
Risposta dell'AI
In C# i tipi sono divisi in tipi di valore (value types) e tipi di riferimento (reference types).
I tipi di valore memorizzano i dati direttamente. Esempi: int, double, struct. Quando vengono assegnati o passati a un metodo, il valore stesso viene copiato, cioè viene creata una copia indipendente.
I tipi di riferimento memorizzano un riferimento a un oggetto in memoria (nell'heap). Esempi: class, string, array. Quando vengono assegnati, viene coperto solo il riferimento, non l'oggetto, quindi più variabili possono riferirsi allo stesso oggetto.
Principali differenze:
- Memorizzazione: i tipi di valore sono generalmente nello stack, i tipi di riferimento nell'heap.
- Copia: i tipi di valore vengono copiati per valore, i tipi di riferimento per riferimento.
- Comportamento alla modifica: modificare un tipo di valore non influisce sulle altre copie, modificare un oggetto di tipo riferimento si riflette su tutte le referenze.
Esempio:
int a = 5;
int b = a; // copia del valore
a = 10; // a rimarrà 5
class Persona { public string Nome; }
Persona p1 = new Persona { Nome = "Иван" };
Persona p2 = p1; // copia della referenza
p2.Nome = "Пётр"; // anche p1.Nome cambierà in "Пётр"