Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Remarque
Ce contenu est réimprimé avec l’autorisation de Pearson Education, Inc. tiré de Lignes directrices de conception de framework : Conventions, Idiomes et Modèles pour les bibliothèques .NET réutilisables, 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.
Les énumérations sont un type de valeur spécial. Il existe deux types d’énumérations : des énumérations simples et des énumérations d’indicateurs.
Les énumérations simples représentent de petits ensembles de choix fermés. Un exemple courant de l’énumération simple est un ensemble de couleurs.
Les énumérations d’indicateurs sont conçues pour prendre en charge les opérations bit à bit sur les valeurs d’énumération. Un exemple courant de l’énumération des indicateurs est une liste d’options.
✔️ Utilisez une énumération pour typiser de manière stricte les paramètres, les propriétés et les valeurs de retour qui représentent des ensembles de valeurs.
✔️ Privilégiez l’utilisation d’une énumération au lieu de constantes statiques.
❌ N’utilisez PAS d’énumération pour les jeux ouverts (par exemple, la version du système d’exploitation, les noms de vos amis, etc.).
❌ Ne fournissez pas de valeurs d’énumération réservées destinées à une utilisation ultérieure.
Vous pouvez toujours simplement ajouter des valeurs à l’énumération existante à un stade ultérieur. Pour plus d’informations sur l’ajout de valeurs à des énumérations, consultez Ajout de valeurs à des énumérations . Les valeurs réservées polluent simplement l’ensemble de valeurs réelles et ont tendance à entraîner des erreurs utilisateur.
❌ ÉVITEZ d’exposer publiquement des énumérations avec une seule valeur.
Une pratique courante pour garantir l’extensibilité future des API C consiste à ajouter des paramètres réservés aux signatures de méthode. Ces paramètres réservés peuvent être exprimés sous forme d’énumérations avec une valeur par défaut unique. Cette opération ne doit pas être effectuée dans les API managées. La surcharge de méthode permet d’ajouter des paramètres dans les versions ultérieures.
❌ N’incluez PAS les valeurs sentinelles dans les énumérations.
Bien qu’elles soient parfois utiles pour les développeurs d’infrastructure, les valeurs sentinelles sont déroutantes pour les utilisateurs de l’infrastructure. Ils sont utilisés pour suivre l’état de l’énumération plutôt que d’être l’une des valeurs de l’ensemble représenté par l’énumération.
✔️ Fournissez une valeur de zéro sur des énumérations simples.
Envisagez d’appeler la valeur comme « None ». Si une telle valeur n’est pas appropriée pour cette énumération particulière, la valeur par défaut la plus courante pour l’énumération doit être affectée à la valeur sous-jacente de zéro.
✔️ ENVISAGEZ d’utiliser Int32 (la valeur par défaut dans la plupart des langages de programmation) comme type sous-jacent d’énumération, sauf si l’un des éléments suivants est vrai :
L’énumération est une énumération d’indicateurs et vous avez plus de 32 indicateurs, ou vous prévoyez d’en avoir davantage à l’avenir.
Le type sous-jacent doit être différent de Int32 pour une interopérabilité plus facile avec le code non géré qui s'attend à des énumérations de tailles différentes.
Un type sous-jacent plus petit entraînerait des économies substantielles dans l’espace. Si vous attendez que l’énumération soit utilisée principalement comme argument pour le flux de contrôle, la taille fait peu de différence. Les réductions de taille pourraient être significatives si :
Vous prévoyez d’utiliser l’énumération comme champ dans une structure ou une classe très fréquemment instanciée.
Vous prévoyez que les utilisateurs créeront de grands tableaux ou des collections d’instances de l’énumération.
Vous prévoyez qu’un grand nombre d’instances de l’énumération seront sérialisées.
Pour une utilisation en mémoire, gardez à l’esprit que les objets gérés sont toujours alignés sur DWORD
, vous avez donc besoin de plusieurs enums ou d’autres petites structures dans une instance pour regrouper un enum plus petit afin de faire la différence, car la taille totale de l’instance sera toujours arrondie à un DWORD
.
✔️ Nommez les enums indicateurs avec des noms pluriels ou des groupes nominaux et les enums simples avec des noms singuliers ou des groupes nominaux.
❌ NE PAS étendre System.Enum directement.
System.Enum est un type spécial utilisé par le CLR pour créer des énumérations définies par l’utilisateur. La plupart des langages de programmation fournissent un élément de programmation qui vous donne accès à cette fonctionnalité. Par exemple, en C#, le enum
mot clé est utilisé pour définir une énumération.
Conception d’énums indicateurs
✔️ Appliquez le System.FlagsAttribute aux énumérateurs indicateurs. N’appliquez pas cet attribut à des énumérations simples.
✔️ Utilisez des puissances de deux pour les valeurs des énumérateurs indicateurs afin qu’elles puissent être librement combinées à l’aide de l’opération OU bit à bit.
✔️ ENVISAGEZ de fournir des valeurs d’énumération spéciales pour les combinaisons couramment utilisées d’indicateurs.
Les opérations au niveau du bit sont un concept avancé et ne doivent pas être requises pour les tâches simples. ReadWrite est un exemple de telle valeur spéciale.
❌ ÉVITEZ de créer des énumérations d’indicateurs où certaines combinaisons de valeurs ne sont pas valides.
❌Évitez d’utiliser des valeurs d’énumérateur indicateur égales à zéro, sauf si la valeur représente « tous les indicateurs sont effacés » et est nommée de manière appropriée, comme prescrit par la directive suivante.
✔️ Nommez la valeur zéro des énumérations d’indicateurs None
. Pour une énumération d’indicateurs, la valeur doit toujours signifier « tous les indicateurs sont effacés ».
Ajout de valeur à des énumérations
Il est très courant de découvrir que vous devez ajouter des valeurs à une énumération après l’avoir déjà livrée. Il existe un problème potentiel de compatibilité d’application lorsque la valeur nouvellement ajoutée est retournée par une API existante, car les applications mal écrites peuvent ne pas gérer correctement la nouvelle valeur.
✔️ ENVISAGEZ d’ajouter des valeurs à des énumérations, malgré un petit risque de compatibilité.
Si vous avez des données réelles sur les incompatibilités d’application provoquées par des ajouts à une énumération, envisagez d’ajouter une nouvelle API qui retourne les nouvelles valeurs et les anciennes valeurs, et de déprécier l’ancienne API, qui doit continuer à retourner uniquement les anciennes valeurs. Cela garantit que vos applications existantes restent compatibles.
Portions © 2005, 2009 Microsoft Corporation. Tous les droits réservés.
Réimprimé par l’autorisation de Pearson Education, Inc. tiré de Framework Design Guidelines : Conventions, Idioms et Patterns pour les bibliothèques .NET réutilisables, 2e édition par Krzysztof Cwalina et Brad Abrams, publié le 22 octobre 2008 par Addison-Wesley Professional dans le cadre de la Série de développement Microsoft Windows.