Sobes.tech
Junior

Qual è la differenza tra tipi di riferimento e tipi di valore?

sobes.tech AI

Risposta dell'AI

Differenze nel modo di memorizzare e trasmettere i dati:

  • Tipi di valore (Value Types):

    • Sono memorizzati direttamente dove sono stati dichiarati (sullo stack o all'interno di un'istanza di tipo valore).
    • Durante l'assegnazione o il passaggio per valore, viene creata una copia del valore.
    • Includono tipi primitivi (int, float, bool, ecc.), strutture (struct) ed enumerazioni (enum).
    • Sono sealed (sigillati) e non possono essere ereditati.
  • Tipi di riferimento (Reference Types):

    • Sono memorizzati nell'heap. La variabile contiene non il valore stesso, ma un riferimento all'indirizzo nell'heap.
    • Durante l'assegnazione o il passaggio per valore, viene coperto solo il riferimento, non l'oggetto stesso.
    • Includono classi (class), interfacce (interface), delegati (delegate) e array (array).
    • Possono supportare l'ereditarietà.
    • Il garbage collector gestisce la liberazione della memoria degli oggetti di tipi di riferimento a cui non ci sono più riferimenti attivi.
// Esempio di tipo di valore (struct)
struct Point
{
    public int X;
    public int Y;
}

// Esempio di tipo di riferimento (class)
class Circle
{
    public int Radius;
}
Caratteristica Tipi di valore Tipi di riferimento
Luogo di memorizzazione Stack o all'interno di un'istanza di tipo valore Heap
Trasferimento/Assegnazione Copia del valore Copia del riferimento
Ereditarietà No
Gestione della memoria Automatica (stack) Garbage collector