Sommario:
Definizione - Cosa significa Tipo mutabile?
Il tipo mutabile, in C #, è un tipo di oggetto i cui membri di dati, come proprietà, dati e campi, possono essere modificati dopo la sua creazione.
I tipi mutabili vengono utilizzati in applicazioni parallele, in cui gli oggetti di tipo valore mutabile vengono mantenuti nello stack da Common Language Runtime (CLR). Ciò fornisce alcune ottimizzazioni, che lo rendono più veloce degli oggetti allocati in heap. Per evitare che si verifichino errori di sincronizzazione in applicazioni parallele a causa di più thread che accedono ai dati condivisi, vengono utilizzati tipi mutabili con un qualche tipo di meccanismo di blocco.
A causa della sua natura intrinseca, i dati di tipo mutabile possono essere modificati durante il runtime, quindi il tipo mutabile viene spesso utilizzato quando l'oggetto contiene una grande quantità di dati modificabili. Sebbene il tipo mutabile non sia sicuro come thread e sicuro come il tipo immutabile, è più spesso usato con variabili di tipo valore, che vengono allocate nello stack, migliorando le prestazioni.
Techopedia spiega il tipo mutabile
Tutti i tipi di valore integrati come int, double, ecc. Sono tipi mutabili e possono essere resi immutabili aggiungendo il modificatore "di sola lettura" prima delle variabili. Se viene specificato un tipo di riferimento modificabile con un modificatore di sola lettura, il compilatore C # genera un avviso. Aggiungendo un modificatore di sola lettura a un campo del tipo di riferimento, il campo non può essere sostituito con un'altra istanza del tipo di riferimento, ma consentirà di modificare i dati dell'istanza del campo tramite il tipo di riferimento.
Ad esempio, StringBuilder è un tipo di riferimento modificabile nella libreria di framework .NET, attraverso il quale è possibile modificare il valore di stringa di un'istanza creata da questo tipo aggiungendo, rimuovendo, sostituendo o inserendo caratteri.
Un tipo mutabile non deve essere derivato da un tipo immutabile perché esiste la possibilità di un metodo virtuale nella classe derivata per sovrascriverlo in modo tale che i membri immutabili vengano sovrascritti.
La principale limitazione del tipo mutabile è che mentre si passa un oggetto di tipo mutabile (come struct) attraverso l'assegnazione di una variabile locale o come parametro a un metodo, il valore dell'oggetto viene trasferito e non l'oggetto stesso. Con ciò, la copia dell'oggetto è mutata e non l'originale. Questo comportamento può portare a bug imprevisti.
