enum (Référence C#)
Le mot clé enum est utilisé pour déclarer une énumération, c'est-à-dire un type distinct constitué d'un ensemble de constantes nommées que l'on appelle « liste d'énumérateurs ». Chaque type d'énumération a un type sous-jacent qui peut être n'importe quel type intégral sauf char. Le type sous-jacent par défaut des éléments de l'énumération est int. Par défaut, le premier énumérateur a la valeur 0, et chaque énumérateur suivant a la valeur n+1. Exemple :
enum Days {Sat, Sun, Mon, Tue, Wed, Thu, Fri};
Dans cette énumération, Sat a la valeur 0, Sun la valeur 1, Mon la valeur 2, et ainsi de suite. Les énumérateurs peuvent comporter des initialiseurs qui se substituent aux valeurs par défaut. Par exemple :
enum Days {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};
Dans cette énumération, la séquence des éléments est forcée à commencer à 1 au lieu de 0.
Une variable de type Days peut recevoir n'importe quelle valeur dans la plage du type sous-jacent ; les valeurs ne sont pas limitées aux constantes nommées.
La valeur par défaut d'un élément (E) enum correspond au résultat de l'expression (E)0.
Remarque |
|---|
|
Le nom d'un énumérateur ne peut pas contenir d'espace blanc. |
Le type sous-jacent spécifie le stockage alloué à chaque énumérateur. Toutefois, une conversion explicite doit être utilisée pour convertir un type enum en type intégral. Par exemple, l'instruction suivante assigne l'énumérateur Sun à une variable du type int à l'aide d'un cast pour convertir de enum en int :
int x = (int)Days.Sun;
Lorsque vous appliquez System.FlagsAttribute à une énumération qui contient des éléments combinés à une opération de bits OR, vous remarquez que l'attribut affecte le comportement de l'enum lorsqu'il est utilisé avec certains outils. Vous pouvez remarquer ces modifications en utilisant des outils tels que les méthodes de classe de Console, l'évaluateur d'expression, etc. (voir l'exemple 3).
L'assignation de valeurs supplémentaires à de nouvelles versions d'enums ou la modification des valeurs des membres enum dans une nouvelle version peuvent poser des problèmes pour le code source dépendant. C'est souvent le cas que les valeurs enum sont utilisées dans les instructions switch, et si les éléments supplémentaires ont été ajoutés au type enum, le test pour les valeurs par défaut peut retourner true de façon inattendue.
Si d'autres développeurs doivent utiliser votre code, il est important de leur fournir des indications sur la façon dont leur code doit réagir si de nouveaux éléments sont ajoutés à des types enum.
Dans cet exemple, l'énumération Days est déclarée. Deux énumérateurs sont explicitement convertis en entiers et assignés à des variables.
// keyword_enum.cs
// enum initialization:
using System;
public class EnumTest
{
enum Days {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};
static void Main()
{
int x = (int)Days.Sun;
int y = (int)Days.Fri;
Console.WriteLine("Sun = {0}", x);
Console.WriteLine("Fri = {0}", y);
}
}
Sortie
Sun = 2 Fri = 7 | |
Dans cet exemple, l'option de type de base est utilisée pour déclarer une enum dont les membres sont de type long. Remarquez que bien que le type sous-jacent de l'énumération soit long, les membres de l'énumération doivent encore être convertis explicitement en type long à l'aide d'un cast.
// keyword_enum2.cs
// Using long enumerators
using System;
public class EnumTest
{
enum Range :long {Max = 2147483648L, Min = 255L};
static void Main()
{
long x = (long)Range.Max;
long y = (long)Range.Min;
Console.WriteLine("Max = {0}", x);
Console.WriteLine("Min = {0}", y);
}
}
Sortie
Max = 2147483648 Min = 255 | |
L'exemple de code suivant illustre l'utilisation et les effets de l'attribut System.FlagsAttribute sur une déclaration enum.
// enumFlags.cs
// Using the FlagsAttribute on enumerations.
using System;
[Flags]
public enum CarOptions
{
SunRoof = 0x01,
Spoiler = 0x02,
FogLights = 0x04,
TintedWindows = 0x08,
}
class FlagTest
{
static void Main()
{
CarOptions options = CarOptions.SunRoof | CarOptions.FogLights;
Console.WriteLine(options);
Console.WriteLine((int)options);
}
}
Sortie
SunRoof, FogLights 5 | |
Pour plus d'informations, consultez les sections suivantes dans Spécifications du langage C#.
-
1.10 Enums
-
6.2.2 Conversions d'énumération explicites
-
14 Enums
Tâches
Attributs, exempleRéférence
Mots clés C#Tableau des types intégraux (Référence C#)
Tableau des types intégrés (Référence C#)
Tableau des conversions numériques implicites (Référence C#)
Tableau des conversions numériques explicites (Référence C#)
Concepts
Guide de programmation C#Conception d'énumérations
Remarque