Remarque
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.
Les énumérations d'indicateurs sont utilisées pour masquer des champs de bits et effectuer des comparaisons de bits. Il s'agit de l'option de conception à utiliser lorsque plusieurs valeurs d'énumération peuvent être spécifiées en même temps. Par exemple, vous pouvez combiner chacune des valeurs d'énumération GenericUriParserOptions pour configurer un analyseur d'URI (Uniform Resource Identifier) générique.
Appliquez l'attribut System.FlagsAttribute aux énumérations d'indicateurs. N'appliquez pas cet attribut aux énumérations simples.
Utilisez des puissances de deux pour les valeurs d'une énumération d'indicateurs afin qu'ils puissent être combinés librement à l'aide de l'opération de bits OR.
Important |
|---|
Si vous n'utilisez pas des puissances de deux ou des combinaisons de puissances de deux, les opérations de bits ne fonctionneront pas comme prévu. |
Envisagez de fournir des valeurs d'énumération spéciales pour les combinaisons d'indicateurs les plus couramment utilisées.
La combinaison de valeurs d'énumération d'indicateurs exige des compétences de niveau intermédiaire dont les développeurs implémentant des scénarios classiques ne devraient pas avoir besoin. Par exemple, l'énumération FileShare contient la valeur ReadWrite pour spécifier qu'un fichier partagé peut être accessible en lecture et en écriture. Cela indique aux développeurs qu'ils peuvent ouvrir un fichier partagé afin de lire celui-ci ou d'y écrire sans exiger d'eux qu'ils sachent comment spécifier une combinaison de valeurs d'énumération en tant que valeur unique.
Évitez de créer des énumérations d'indicateurs lorsque certaines combinaisons de valeurs ne sont pas valides.
Ce problème indique généralement que la signification de l'énumération n'est pas suffisamment précise. Envisagez de diviser l'énumération en deux ou plusieurs énumérations, chacune possédant un ensemble plus précis de valeurs. Prenez l'exemple de l'énumération mal définie suivante.
<Flags()> _
Public Enum PurchaseTypes
SalePrice
RegularPrice
Book
CompactDisk
End Enum
[Flags]
public enum PurchaseTypes
{
SalePrice,
RegularPrice,
Book,
CompactDisk
}
Le concepteur souhaite utiliser cette énumération avec la méthode suivante.
Public Overloads Function FindPriceForItem(ByVal title As String, ByVal purchase As PurchaseTypes) As Single
Return 0
End Function
public float FindPriceForItem(string title, PurchaseTypes purchase)
Lors de l'appel à cette méthode, le paramètre purchase spécifie exactement une des valeurs SalePrice ou RegularPrice et exactement une des valeurs Book ou CompactDisk. Les développeurs ne seraient pas en mesure de déterminer l'élément requis sans consulter la documentation ou tester la méthode. Une meilleure approche consiste à séparer les deux types d'informations, en les plaçant dans leur propre énumération, comme illustré dans l'exemple de code suivant.
Public Enum ItemType
Book
CompactDisk
End Enum
Public Enum PriceType
SalePrice
RegularPrice
End Enum
public enum ItemType
{
Book,
CompactDisk
}
public enum PriceType
{
SalePrice,
RegularPrice,
}
La signature de méthode est modifiée pour refléter le nouveau design, comme l'illustre l'exemple de code suivant.
Public Overloads Function FindPriceForItem(ByVal title As String, ByVal name As ItemType, ByVal price As PriceType) As Single
Return 0
End Function
public float FindPriceForItem(string title, ItemType name, PriceType price)
Évite d'affecter zéro à une valeur d'énumération d'indicateurs, sauf si la valeur sert à indiquer que tous les indicateurs sont supprimés. Une telle valeur doit être nommée de façon appropriée, comme spécifié dans l'instruction suivante.
Notez que cette instruction concerne uniquement des énumérations d'indicateurs. Des énumérations simples peuvent, et doivent, utiliser la valeur zéro.
Attribuez le nom None à la valeur zéro des énumérations d'indicateurs. Dans le cas d'une énumération d'indicateurs, la valeur doit toujours signifier que tous les indicateurs sont supprimés.
Important |
|---|
N'utilisez pas la valeur zéro dans une énumération d'indicateurs pour indiquer un autre étatcar il n'existe aucun moyen de vérifier s'il s'agit d'un indicateur de valeur zéro explicitement défini ou si cela signifie qu'aucun indicateur n'a été défini. |
Portions Copyright 2005 Microsoft Corporation. Tous droits réservés.
Portions Copyright Addison-Wesley Corporation. Tous droits réservés.
Pour plus d'informations sur les règles de conception, consultez « règles de conception d'infrastructure : Conventions idiomes et modèles carnet de bibliothèques réutilisables framework » Krzysztof Cwalina et Brad Abrams, publiés par Addison-Wesley, 2005.
Voir aussi
Concepts
Ajout de valeurs à des énumérations
Autres ressources
Instructions de conception de types
Instructions de conception pour le développement de bibliothèques de classes
Important