Come sappiamo, le classidifferiscono dalle strutture per il fatto che le prime sono dei tipi reference mentre le seconde sono tipi value (definizione). Le differenze quindi sono abbastanza signficative ma vi sono diversi casi in cui una classe può essere sostituita da una struttura lasciando inalterato il comportamento dell'applicazione.
Sostituire una classe con una struttura apporta notevoli vantaggi se consideriamo che una struttura essendo memorizzata nello stack viene trattata molto più efficacemente di una classe che invece ha a che fare con lo heap. Inoltre una struttura viene subito disallocata non appena termina il suo ambito di validità mentre le classi devono attendere il passaggio del Garbage Collector per essere rimosse dalla memoria.
Va posta particolare attenzione solo in quei casi in cui vi siano nel codice molte operazioni di boxinged unboxing (definizione), perché in questo caso i vantaggi delle strutture rispetto alle classi vengono meno ed anzi si possono anche ottenere prestazioni inferiori.
Va quindi considerato l'uso di una struttura al posto di una classe, quando:
- Le istanze del tipo sono di ridotte dimensioni (inferiore a 16byte)
- Le istanze del tipo devono avere breve durata
- Non sono utilizzate numerose operazioni di boxing/unboxing
- Il tipo da rappresentare può essere assimilato a livello logico ad un unico valore
- Il tipo è un elemento immutabile