Immutable tipi di valore e tipi di riferimento immutabili sono semanticamente quasi identica; le uniche differenze sono che i tipi di riferimento supportano controlli di uguaglianza di riferimento che possono o non possono essere significativi, e che i tipi di valore possono essere avvolti in un Nullable (Of T) mentre i tipi di riferimento sono implicitamente annullabili. Se un tipo sarà immutabile, a seconda di come verrà utilizzato, potrebbero esserci motivi di rendimento per favorire una struttura o una classe; le strutture sono più veloci per alcune operazioni (quasi tutte le operazioni, per dimensioni inferiori a quattro byte), mentre le classi potrebbero essere più veloci per alcune altre (specialmente per le cose più grandi di 16 byte). Inoltre, alcuni tipi di operazioni sono essenzialmente impossibili con le strutture.
I tipi di strutture mutevoli sono utili, contrariamente a quanto affermano alcuni oppositori, ma ci sono alcuni avvertimenti. Se uno ha una variabile che contiene un riferimento a un oggetto di classe mutabile, e uno fa qualcosa per cambiare quell'oggetto, quel cambiamento sarà effettivamente "visto" da tutto ciò che contiene un riferimento a quell'oggetto. Se si desidera cambiare un oggetto senza disturbare qualcos'altro, si deve sapere che si detiene l'unico riferimento a quell'oggetto. Spesso l'unico modo per essere sicuri di ciò è copiare tutti i dati dall'oggetto in una nuova istanza di oggetto e quindi apportare la modifica alla nuova istanza. Al contrario, se uno ha una struttura mutevole, si può semplicemente fare qualunque modifica si desideri senza dover creare una nuova istanza.
L'unico vero problema con le strutture mutevoli è che .NET utilizza varie astrazioni per renderli comportarsi come parte del sistema di tipo unificato, e queste astrazioni può provocare copie di strutture da utilizzare in luoghi dove logicamente dovrebbero essere utilizzati gli originali . Non è sempre ovvio quando queste sostituzioni possono verificarsi e possono portare a comportamenti confusi ed errati.
Se non puoi decidere, è quasi certamente un 'classe'. È incredibilmente raro * legittimamente * scrivere una struttura. –
Per i programmatori turchi, ho un post sul blog http://sonergonul.net/2012/12/net-icerisinde-deger-tipi-ve-referans-tipi/ –