Condividi tramite


Progettazione di struct

Annotazioni

Questo contenuto viene ristampato con il permesso di Pearson Education, Inc. da Framework Design Guidelines: Conventions, Idioms e Pattern per Librerie .NET Riutilizzabili, 2a Edizione. Tale edizione è stata pubblicata nel 2008 e il libro è stato completamente rivisto nella terza edizione. Alcune informazioni in questa pagina potrebbero non essere aggiornate.

Il tipo di valore per utilizzo generico viene spesso definito struct, la relativa parola chiave C#. In questa sezione vengono fornite linee guida per la progettazione generale degli struct.

❌ Non specificare un costruttore senza parametri per una struttura.

Seguendo questa linea guida, è possibile creare matrici di struct senza dover eseguire il costruttore in ogni elemento della matrice. Si noti che C# non consente agli struct di avere costruttori senza parametri.

❌ NON definire tipi di valore modificabili.

I tipi valore modificabili presentano diversi problemi. Ad esempio, quando un getter di proprietà restituisce un tipo di valore, il chiamante riceve una copia. Poiché la copia viene creata in modo implicito, gli sviluppatori potrebbero non essere consapevoli della modifica della copia e non del valore originale. Inoltre, alcuni linguaggi (linguaggi dinamici, in particolare) presentano problemi nell'uso di tipi valore modificabili, perché anche le variabili locali, quando dereferenziate, causano la creazione di una copia.

✔️ ASSICURARSI che uno stato in cui tutti i dati dell'istanza sono impostati su zero, false o null (a seconda del caso) sia valido.

Ciò impedisce la creazione accidentale di istanze non valide quando viene creata una matrice degli struct.

✔️ IMPLEMENTARE IEquatable<T> su tipi di valore.

Il metodo Object.Equals sui tipi di valore causa il boxing, e la sua implementazione predefinita non è particolarmente efficiente, perché utilizza la riflessione. Equals può avere prestazioni molto migliori e può essere implementato in modo che non causerà il boxing.

❌ NON estendere ValueType in modo esplicito. In effetti, la maggior parte delle lingue impedisce questo.

In generale, gli struct possono essere molto utili, ma devono essere usati solo per valori piccoli, singoli e non modificabili che non verranno incapsulati frequentemente.

© Porzioni 2005, 2009 Microsoft Corporation. Tutti i diritti riservati.

Ristampato dall'autorizzazione di Pearson Education, Inc. da Framework Design Guidelines: Conventions, Idioms e Patterns for Reusable .NET Libraries, 2nd Edition di Krzysztof Cwalina e Brad Abrams, pubblicato il 22 ottobre 2008 da Addison-Wesley Professional come parte della Serie di sviluppo di Microsoft Windows.

Vedere anche