Sobes.tech
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 "Пётр"