Progettazione di struct

Nota

Questo contenuto è ristampato con l'autorizzazione di Pearson Education, Inc. da Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition. Tale edizione è stata pubblicata nel 2008 e il libro è stato interamente revisionato nella terza edizione. Alcune delle informazioni contenute in questa pagina potrebbero non essere aggiornate.

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

❌ NON SPECIFICARE un costruttore senza parametri per una struct.

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 alle struct di avere costruttori senza parametri.

❌ NON DEFINIRE tipi valore mutable.

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

✔️ VERIFICARE che lo stato in cui tutti i dati dell'istanza siano impostati su zero, false o null (in base alle esigenze) sia valido.

Questo impedisce la creazione accidentale di istanze non valide quando viene creata una matrice delle struct.

✔️ IMPLEMENTARE IEquatable<T> su tipi valore.

Il metodo Object.Equals sui tipi valore determina la conversione boxing e la sua implementazione per impostazione predefinita non è molto efficiente, perché usa la reflection. Equals può avere prestazioni decisamente migliori e ed è implementabile in modo che non vi sia conversione boxing.

❌ NON ESEGUIRE ESTENSIONE ValueType in modo esplicito. Di fatto, la maggior parte dei linguaggi lo impedisce.

In generale, le struct possono essere molto utili, ma devono essere usate solo per valori piccoli, singoli e non modificabili che saranno boxed solo raramente.

Parti protette da copyright © 2005, 2009 Microsoft Corporation. Tutti i diritti sono riservati.

Ristampato con l'autorizzazione di Pearson Education, Inc. da Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2a edizione di Krzysztof Cwalina and Brad Abrams, pubblicato il 22 ottobre 2008 da Addison-Wesley Professional nella collana Microsoft Windows Development Series.

Vedi anche