Enum, instruction (Visual Basic)

Déclare une énumération et définit les valeurs de ses membres.

Syntaxe

[ <attributelist> ] [ accessmodifier ]  [ Shadows ]
Enum enumerationname [ As datatype ]
   memberlist
End Enum

Éléments

  • attributelist

    Optionnel. Liste des attributs qui s’appliquent à cette énumération. Vous devez placer la liste d’attributs entre crochets (« < » et « > »).

    L’attribut FlagsAttribute indique que la valeur d’un instance de l’énumération peut inclure plusieurs membres d’énumération et que chaque membre représente un champ de bits dans la valeur d’énumération.

  • accessmodifier

    Optionnel. Spécifie le code pouvant accéder à cette énumération. Il peut s'agir d'une des méthodes suivantes :

  • Shadows

    Optionnel. Indique que cette énumération redéclare et masque un élément de programmation du même nom ou un ensemble d’éléments surchargés dans une classe de base. Vous pouvez définir les clichés instantanés uniquement sur l’énumération elle-même, et non sur ses membres.

  • enumerationname

    Obligatoire. Nom de l’énumération. Pour plus d’informations sur les noms valides, consultez Noms d’éléments déclarés.

  • datatype

    Optionnel. Type de données de l’énumération et de tous ses membres.

  • memberlist

    Obligatoire. Liste des constantes membres déclarées dans cette instruction. Plusieurs membres apparaissent sur des lignes de code source individuelles.

    Chaque member emploie la syntaxe et les éléments suivants : [<attribute list>] member name [ = initializer ]

    Élément Description
    membername Obligatoire. Nom de ce membre.
    initializer Optionnel. Expression évaluée au moment de la compilation et affectée à ce membre.
  • End Enum

    Met fin au bloc Enum.

Notes

Si vous avez un ensemble de valeurs immuables qui sont logiquement liées les unes aux autres, vous pouvez les définir ensemble dans une énumération. Cela fournit des noms significatifs pour l’énumération et ses membres, qui sont plus faciles à mémoriser que leurs valeurs. Vous pouvez ensuite utiliser les membres d’énumération à de nombreux emplacements dans votre code.

Les avantages de l’utilisation d’énumérations sont les suivants :

  • Permet de réduire les erreurs de transposition ou de saisie des nombres.

  • Facilite la future modification des valeurs.

  • Rend le code plus facile à lire, ce qui réduit le risque d’y introduire des erreurs.

  • Garantit une compatibilité ascendante. Si vous utilisez les énumérations, le risque d’échec de votre code est moindre si, à l’avenir, un utilisateur modifie les valeurs correspondant aux noms des membres.

Une énumération a un nom, un type de données sous-jacent et un ensemble de membres. Chaque membre représente une constante.

Une énumération déclarée au niveau de la classe, de la structure, du module ou de l’interface, en dehors de toute procédure, est une énumération membre. Il s’agit d’un membre de la classe, de la structure, du module ou de l’interface qui le déclare.

Les énumérations de membres sont accessibles à partir de n’importe où dans leur classe, structure, module ou interface. Le code en dehors d’une classe, d’une structure ou d’un module doit qualifier le nom d’une énumération membre avec le nom de cette classe, structure ou de ce module. Vous pouvez éviter d’utiliser des noms complets en ajoutant une instruction Imports au fichier source.

Une énumération déclarée au niveau de l’espace de noms, en dehors de toute classe, structure, module ou interface, est membre de l’espace de noms dans lequel elle apparaît.

Le contexte de déclaration d’une énumération doit être un fichier source, un espace de noms, une classe, une structure, un module ou une interface et ne peut pas être une procédure. Pour plus d’informations, consultez Contextes de déclaration et niveaux d’accès par défaut.

Vous pouvez appliquer des attributs à une énumération dans son ensemble, mais pas à ses membres individuellement. Un attribut fournit des informations aux métadonnées de l’assembly.

Type de données

L’instruction Enum peut déclarer le type de données d’une énumération. Chaque membre prend le type de données de l’énumération. Vous pouvez spécifier Byte, Integer, Long, SByte, Short, UInteger, ULong ou UShort.

Si vous ne spécifiez pas datatype pour l’énumération, chaque membre prend le type de données de son initializer. Si vous spécifiez à la fois datatype et initializer, le type de données de initializer doit être convertible en datatype. Si ni datatype ni initializer n’est présent, le type de données par défaut est Integer.

Initialisation des membres

L’instruction Enum peut initialiser le contenu des membres sélectionnés dans memberlist. Vous utilisez initializer pour fournir une expression à affecter au membre.

Si vous ne spécifiez pas initializer pour un membre, Visual Basic l’initialise soit à zéro (s’il s’agit du premier member dans memberlist), soit à une valeur supérieure d’un par rapport au précédent immédiat de member.

L’expression fournie dans chaque initializer peut être n’importe quelle combinaison de littéraux, d’autres constantes déjà définies et de membres d’énumération déjà définis, y compris un membre précédent de cette énumération. Vous pouvez utiliser des opérateurs arithmétiques et logiques pour combiner ces éléments.

Vous ne pouvez pas utiliser de variables ou de fonctions dans initializer. Toutefois, vous pouvez utiliser des mots clés de conversion tels que CByte et CShort. Vous pouvez également utiliser AscW si vous l’appelez avec une constante String ou un argument Char, car cela peut être évalué au moment de la compilation.

Les énumérations ne peuvent pas avoir de valeurs à virgule flottante. Si une valeur à virgule flottante est attribuée à un membre et que Option Strict est défini sur activé, une erreur du compilateur se produit. Si Option Strict est désactivé, la valeur est automatiquement convertie en type Enum.

Si la valeur d’un membre dépasse la plage autorisée pour le type de données sous-jacent, ou si vous initialisez un membre à la valeur maximale autorisée par le type de données sous-jacentes, le compilateur signale une erreur.

Modificateurs

Les énumérations de membres de classe, de structure, de module et d’interface sont par défaut l’accès public. Vous pouvez ajuster leurs niveaux d’accès avec les modificateurs d’accès. Les énumérations des membres de l’espace de noms sont par défaut l’accès ami. Vous pouvez ajuster leurs niveaux d’accès au public, mais pas au niveau privé ou protégé. Pour plus d’informations, consultez Niveaux d’accès en Visual Basic.

Tous les membres de l’énumération disposent d’un accès public et vous ne pouvez pas utiliser de modificateurs d’accès sur eux. Toutefois, si l’énumération elle-même a un niveau d’accès plus restreint, le niveau d’accès d’énumération spécifié est prioritaire.

Par défaut, toutes les énumérations sont des types et leurs champs sont des constantes. Par conséquent, les mots clés Shared, Static et ReadOnly ne peuvent pas être utilisés lors de la déclaration d’une énumération ou de ses membres.

Affectation de plusieurs valeurs

Les énumérations représentent généralement des valeurs mutuellement exclusives. En incluant l’attribut FlagsAttribute dans la déclaration Enum, vous pouvez affecter plusieurs valeurs à une instance de l’énumération. L’attribut FlagsAttribute précise que l’énumération doit être traitée comme un champ de bits, c’est-à-dire un ensemble d’indicateurs. Il s’agit d’énumérations au niveau du bit.

Lorsque vous déclarez une énumération à l’aide de l’attribut FlagsAttribute, nous vous recommandons d’utiliser des pouvoirs de 2, c’est-à-dire 1, 2, 4, 8, 16, etc. pour les valeurs. Nous recommandons également que « None » soit le nom d’un membre dont la valeur est 0. Pour obtenir des instructions supplémentaires, consultez FlagsAttribute et Enum.

Exemple 1

L’exemple suivant montre comment utiliser l’instruction Enum. Notez que le membre est appelé EggSizeEnum.Medium, et non Medium.

Public Class Egg
    Enum EggSizeEnum
        Jumbo
        ExtraLarge
        Large
        Medium
        Small
    End Enum

    Public Sub Poach()
        Dim size As EggSizeEnum

        size = EggSizeEnum.Medium
        ' Continue processing...
    End Sub
End Class

Exemple 2

La méthode de l’exemple suivant est en dehors de la classe Egg. Par conséquent, EggSizeEnum est entièrement qualifié comme Egg.EggSizeEnum.

Public Sub Scramble(ByVal size As Egg.EggSizeEnum)
    ' Process for the three largest sizes.
    ' Throw an exception for any other size.
    Select Case size
        Case Egg.EggSizeEnum.Jumbo
            ' Process.
        Case Egg.EggSizeEnum.ExtraLarge
            ' Process.
        Case Egg.EggSizeEnum.Large
            ' Process.
        Case Else
            Throw New ApplicationException("size is invalid: " & size.ToString)
    End Select
End Sub

Exemple 3

L’exemple suivant utilise l’instruction Enum pour définir un ensemble associé de valeurs constantes nommées. Dans ce cas, les valeurs sont des couleurs que vous pouvez choisir pour concevoir des formulaires de saisie de données pour une base de données.

Public Enum InterfaceColors
    MistyRose = &HE1E4FF&
    SlateGray = &H908070&
    DodgerBlue = &HFF901E&
    DeepSkyBlue = &HFFBF00&
    SpringGreen = &H7FFF00&
    ForestGreen = &H228B22&
    Goldenrod = &H20A5DA&
    Firebrick = &H2222B2&
End Enum

Exemple 4

L’exemple suivant montre des valeurs qui incluent des nombres positifs et négatifs.

Enum SecurityLevel
    IllegalEntry = -1
    MinimumSecurity = 0
    MaximumSecurity = 1
End Enum

Exemple 5

Dans l’exemple suivant, une clause As est utilisée pour spécifier le datatype d’une énumération.

Public Enum MyEnum As Byte
    Zero
    One
    Two
End Enum

Exemple 6

L’exemple suivant présente l’utilisation de l’énumération au niveau du bit. Plusieurs valeurs peuvent être affectées à une instance d’une énumération au niveau du bit. La déclaration Enum inclut l’attribut FlagsAttribute, qui indique que l’énumération peut être traitée comme un ensemble d’indicateurs.

' Apply the Flags attribute, which allows an instance
' of the enumeration to have multiple values.
<Flags()> Public Enum FilePermissions As Integer
    None = 0
    Create = 1
    Read = 2
    Update = 4
    Delete = 8
End Enum

Public Sub ShowBitwiseEnum()

    ' Declare the non-exclusive enumeration object and
    ' set it to multiple values.
    Dim perm As FilePermissions
    perm = FilePermissions.Read Or FilePermissions.Update

    ' Show the values in the enumeration object.
    Console.WriteLine(perm.ToString)
    ' Output: Read, Update

    ' Show the total integer value of all values
    ' in the enumeration object.
    Console.WriteLine(CInt(perm))
    ' Output: 6

    ' Show whether the enumeration object contains
    ' the specified flag.
    Console.WriteLine(perm.HasFlag(FilePermissions.Update))
    ' Output: True
End Sub

Exemple 7

L’exemple suivant itère au sein d’une énumération. Elle utilise la méthode GetNames pour récupérer un tableau de noms de membres à partir de l’énumération, et GetValues pour récupérer un tableau de valeurs de membre.

Enum EggSizeEnum
    Jumbo
    ExtraLarge
    Large
    Medium
    Small
End Enum

Public Sub Iterate()
    Dim names = [Enum].GetNames(GetType(EggSizeEnum))
    For Each name In names
        Console.Write(name & " ")
    Next
    Console.WriteLine()
    ' Output: Jumbo ExtraLarge Large Medium Small 

    Dim values = [Enum].GetValues(GetType(EggSizeEnum))
    For Each value In values
        Console.Write(value & " ")
    Next
    Console.WriteLine()
    ' Output: 0 1 2 3 4 
End Sub

Voir aussi