Partage via


Conception de structures

Remarque

Ce contenu est réimprimé avec l’autorisation de Pearson Education, Inc. à partir des Instructions de conception d’une infrastructure : conventions, idiomes et modèles des bibliothèques réutilisables .NET, 2ème édition. Cette édition a été publiée en 2008, et le livre a été entièrement révisé dans la troisième édition. Certaines informations de cette page peuvent être obsolètes.

Le type valeur à usage général est le plus souvent appelé struct, son mot clé C#. Cette section fournit des instructions pour la conception de structs générale.

❌ NE FOURNISSEZ PAS un constructeur sans paramètre à un struct.

Le respect de cette instruction permet de créer des tableaux de structs sans avoir à exécuter le constructeur sur chaque élément du tableau. Notez que C# n’autorise pas les structs à avoir des constructeurs sans paramètre.

❌ NE DÉFINISSEZ PAS des types valeur mutables.

Les types valeur mutables présentent plusieurs problèmes. Par exemple, lorsqu’un getter de propriété retourne un type valeur, l’appelant reçoit une copie. Étant donné que la copie est créée implicitement, les développeurs risquent de ne pas savoir qu’ils modifient la copie, et non la valeur d’origine. En outre, certains langages (en particulier les langages dynamiques) rencontrent des problèmes quand ils utilisent des types valeur mutables, car même les variables locales, lorsqu’elles sont déréférencées, entraînent la réalisation d’une copie.

✔️ VEILLEZ à ce qu’un état où toutes les données d’instance ont la valeur zéro, false ou Null (si nécessaire) soit valide.

Cela empêche toute création accidentelle d’instances non valides lorsqu’un tableau des structs est créé.

✔️ IMPLÉMENTEZ IEquatable<T> sur des types valeur.

La méthode Object.Equals sur des types valeur entraîne un boxing et son implémentation par défaut n’est pas très efficace car elle utilise une réflexion. Equals peut donner de bien meilleures performances et peut être implémenté afin de ne pas entraîner de boxing.

❌ N’ÉTENDEZ PAS ValueType explicitement. En fait, la plupart des langues empêchent ce phénomène.

En général, les structs peuvent s’avérer très utiles, mais ils ne doivent être utilisés que pour des valeurs petites, uniques et immuables qui ne seront pas souvent boxées.

Portions © 2005, 2009 Microsoft Corporation. Tous droits réservés.

Réimprimé avec l’autorisation de Pearson Education, Inc. et extrait de Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition par Krzysztof Cwalina et Brad Abrams, publié le 22 octobre 2008 par Addison-Wesley Professional dans le cadre de la série sur le développement Microsoft Windows.

Voir aussi