6 sur 7 ont trouvé cela utile - Évaluez ce sujet

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.

RemarqueRemarque

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

Si vous supprimez l'initialiseur de Sat=1, le résultat est le suivant :

Sun = 1
Fri = 6

Remarquez que si vous supprimez FlagsAttribute, l'exemple aura pour résultat les éléments suivants :

5

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

Cela vous a-t-il été utile ?
(1500 caractères restants)

Ajouts de la communauté

AJOUTER
© 2013 Microsoft. Tous droits réservés.