Scelta tra classi e strutture
Le classi sono tipi di riferimento, mentre le strutture sono tipi di valore. I tipi di riferimento vengono allocati sull'heap e la gestione della memoria è affidata al Garbage Collector. I tipi di valore vengono allocati nello stack o inline e disallocati quando non rientrano più nell'ambito di validità. In generale, l'allocazione e la disallocazione dei tipi di valore risulta meno costosa. Se, tuttavia, vengono utilizzati in scenari che richiedono una quantità significativa di operazioni di boxing e unboxing, le relative prestazioni risultano inferiori rispetto a quelle dei tipi di riferimento. Per ulteriori informazioni, vedere Boxing and Unboxing (C# Programming Guide).
Per ulteriori informazioni sui tipi di valore e i tipi di riferimento, vedere Common Type System.
Si consiglia di definire una struttura anziché una classe se le istanze del tipo sono di piccole dimensioni e di breve durata o se vengono comunemente incorporate in altri oggetti.
Definire una struttura solo nel caso in cui il tipo presenti tutte le caratteristiche elencate di seguito:
Rappresenta a livello logico un singolo valore, simile ai tipi primitivi (integer, double e così via).
La dimensione delle istanze è inferiore a 16 byte.
È un elemento non modificabile.
Non deve essere sottoposta a frequenti operazioni di boxing.
Se una o più delle condizioni elencate sopra non viene soddisfatta, creare un tipo di riferimento anziché una struttura. La mancata osservanza di questa linea guida può comportare una riduzione delle prestazioni.
Portions Copyright 2005 Microsoft Corporation. Tutti i diritti riservati.
Portions Copyright Addison-Wesley Corporation. Tutti i diritti riservati.
Per ulteriori informazioni sulle linee guida di progettazione, vedere “le linee guida di progettazione di Framework: Idiomi convenzioni, e modelli per libro raccolte riutilizzabili .NET„ di Krzysztof Cwalina e brad Abrams, emessi da Addison-Wesley, 2005.
Vedere anche
Altre risorse
Linee guida di progettazione dei tipi
Linee guida di progettazione per lo sviluppo di librerie di classi