Istruzione Enum (Visual Basic)Enum Statement (Visual Basic)

Dichiara un'enumerazione e definisce i valori dei relativi membri.Declares an enumeration and defines the values of its members.

SintassiSyntax

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

PartiParts

  • attributelist

    Facoltativa.Optional. Elenco degli attributi che si applicano a questa enumerazione.List of attributes that apply to this enumeration. È necessario racchiudere l' elenco degli attributi tra parentesi angolari (" < " e " > ").You must enclose the attribute list in angle brackets ("<" and ">").

    L' FlagsAttribute attributo indica che il valore di un'istanza dell'enumerazione può includere più membri di enumerazione e che ogni membro rappresenta un campo di bit nel valore di enumerazione.The FlagsAttribute attribute indicates that the value of an instance of the enumeration can include multiple enumeration members, and that each member represents a bit field in the enumeration value.

  • accessmodifier

    Facoltativa.Optional. Specifica il codice che può accedere a questa enumerazione.Specifies what code can access this enumeration. Può essere uno dei seguenti:Can be one of the following:

  • Shadows

    Facoltativa.Optional. Specifica che questa enumerazione dichiara e nasconde un elemento di programmazione con nome identico o un set di elementi in overload in una classe base.Specifies that this enumeration redeclares and hides an identically named programming element, or set of overloaded elements, in a base class. È possibile specificare le ombreggiature solo sull'enumerazione stessa, non su nessuno dei relativi membri.You can specify Shadows only on the enumeration itself, not on any of its members.

  • enumerationname

    Obbligatorio.Required. Nome dell'enumerazione.Name of the enumeration. Per informazioni sui nomi validi, vedere nomi di elementi dichiarati.For information on valid names, see Declared Element Names.

  • datatype

    Facoltativa.Optional. Tipo di dati dell'enumerazione e di tutti i relativi membri.Data type of the enumeration and all its members.

  • memberlist

    Obbligatorio.Required. Elenco di costanti membro dichiarate in questa istruzione.List of member constants being declared in this statement. Vengono visualizzati più membri nelle singole righe del codice sorgente.Multiple members appear on individual source code lines.

    Ognuno member presenta la sintassi e le parti seguenti:[<attribute list>] member name [ = initializer ]Each member has the following syntax and parts: [<attribute list>] member name [ = initializer ]

    PartePart DescrizioneDescription
    membername Obbligatorio.Required. Nome del membro.Name of this member.
    initializer Facoltativa.Optional. Espressione valutata in fase di compilazione e assegnata a questo membro.Expression that is evaluated at compile time and assigned to this member.
  • End EnumEnd Enum

    Termina il blocco Enum.Terminates the Enum block.

CommentiRemarks

Se si dispone di un set di valori non modificabili logicamente correlati tra loro, è possibile definirli insieme in un'enumerazione.If you have a set of unchanging values that are logically related to each other, you can define them together in an enumeration. Che fornisce nomi significativi per l'enumerazione e i relativi membri, che sono più facili da ricordare rispetto ai relativi valori.This provides meaningful names for the enumeration and its members, which are easier to remember than their values. È quindi possibile usare i membri di enumerazione in molte posizioni nel codice.You can then use the enumeration members in many places in your code.

I vantaggi dell'utilizzo delle enumerazioni includono quanto segue:The benefits of using enumerations include the following:

  • Riduce gli errori causati dalla trasposizione o dalla digitazione errata dei numeri.Reduces errors caused by transposing or mistyping numbers.

  • Semplifica la modifica dei valori in futuro.Makes it easy to change values in the future.

  • Semplifica la lettura del codice, il che significa che è meno probabile che vengano introdotti errori.Makes code easier to read, which means it is less likely that errors will be introduced.

  • Garantisce la compatibilità con le edizioni.Ensures forward compatibility. Se si utilizzano le enumerazioni, è meno probabile che il codice abbia esito negativo se in futuro qualcuno modifica i valori corrispondenti ai nomi dei membri.If you use enumerations, your code is less likely to fail if in the future someone changes the values corresponding to the member names.

Un'enumerazione ha un nome, un tipo di dati sottostante e un set di membri.An enumeration has a name, an underlying data type, and a set of members. Ogni membro rappresenta una costante.Each member represents a constant.

Un'enumerazione dichiarata a livello di classe, struttura, modulo o interfaccia, all'esterno di qualsiasi routine, è un' enumerazione di membri.An enumeration declared at class, structure, module, or interface level, outside any procedure, is a member enumeration. È un membro della classe, struttura, modulo o interfaccia che lo dichiara.It is a member of the class, structure, module, or interface that declares it.

È possibile accedere alle enumerazioni dei membri da qualsiasi posizione all'interno della classe, struttura, modulo o interfaccia.Member enumerations can be accessed from anywhere within their class, structure, module, or interface. Il codice esterno a una classe, una struttura o un modulo deve qualificare il nome di un'enumerazione membro con il nome della classe, della struttura o del modulo.Code outside a class, structure, or module must qualify a member enumeration's name with the name of that class, structure, or module. Per evitare di dover utilizzare nomi completi, è possibile aggiungere un'istruzione Imports al file di origine.You can avoid the need to use fully qualified names by adding an Imports statement to the source file.

Un'enumerazione dichiarata a livello di spazio dei nomi, all'esterno di qualsiasi classe, struttura, modulo o interfaccia, è un membro dello spazio dei nomi in cui viene visualizzata.An enumeration declared at namespace level, outside any class, structure, module, or interface, is a member of the namespace in which it appears.

Il contesto di dichiarazione per un'enumerazione deve essere un file di origine, uno spazio dei nomi, una classe, una struttura, un modulo o un'interfaccia e non può essere una routine.The declaration context for an enumeration must be a source file, namespace, class, structure, module, or interface, and cannot be a procedure. Per altre informazioni, vedere Contesti delle dichiarazioni e livelli di accesso predefiniti.For more information, see Declaration Contexts and Default Access Levels.

È possibile applicare gli attributi a un'enumerazione nel suo complesso, ma non ai relativi membri singolarmente.You can apply attributes to an enumeration as a whole, but not to its members individually. Un attributo fornisce informazioni ai metadati dell'assembly.An attribute contributes information to the assembly's metadata.

Tipo di datiData Type

L' Enum istruzione può dichiarare il tipo di dati di un'enumerazione.The Enum statement can declare the data type of an enumeration. Ogni membro accetta il tipo di dati dell'enumerazione.Each member takes the enumeration's data type. È possibile specificare Byte , Integer , Long , SByte , Short , UInteger , ULong o UShort .You can specify Byte, Integer, Long, SByte, Short, UInteger, ULong, or UShort.

Se non si specifica datatype per l'enumerazione, ogni membro accetta il tipo di dati del relativo oggetto initializer .If you do not specify datatype for the enumeration, each member takes the data type of its initializer. Se si specificano sia datatype che initializer , il tipo di dati di initializer deve essere convertibile in datatype .If you specify both datatype and initializer, the data type of initializer must be convertible to datatype. Se né datatypeinitializer sono presenti, il tipo di dati predefinito è Integer .If neither datatype nor initializer is present, the data type defaults to Integer.

Inizializzazione di membriInitializing Members

L' Enum istruzione consente di inizializzare il contenuto dei membri selezionati in memberlist .The Enum statement can initialize the contents of selected members in memberlist. Usare initializer per fornire un'espressione da assegnare al membro.You use initializer to supply an expression to be assigned to the member.

Se non si specifica initializer per un membro, Visual Basic lo inizializza su zero (se è il primo member in memberlist ) o su un valore maggiore di uno rispetto a quello dell'oggetto immediatamente precedente member .If you do not specify initializer for a member, Visual Basic initializes it either to zero (if it is the first member in memberlist), or to a value greater by one than that of the immediately preceding member.

L'espressione fornita in ogni initializer può essere costituita da qualsiasi combinazione di valori letterali, altre costanti già definite e membri di enumerazione già definiti, incluso un membro precedente di questa enumerazione.The expression supplied in each initializer can be any combination of literals, other constants that are already defined, and enumeration members that are already defined, including a previous member of this enumeration. Per combinare tali elementi, è possibile utilizzare operatori aritmetici e logici.You can use arithmetic and logical operators to combine such elements.

Non è possibile usare variabili o funzioni in initializer .You cannot use variables or functions in initializer. Tuttavia, è possibile usare parole chiave di conversione, ad esempio CByte e CShort .However, you can use conversion keywords such as CByte and CShort. È anche possibile usare AscW se lo si chiama con una costante String o un Char argomento, poiché può essere valutato in fase di compilazione.You can also use AscW if you call it with a constant String or Char argument, since that can be evaluated at compile time.

Le enumerazioni non possono avere valori a virgola mobile.Enumerations cannot have floating-point values. Se a un membro viene assegnato un valore a virgola mobile ed Option Strict è impostato su on, si verifica un errore del compilatore.If a member is assigned a floating-point value and Option Strict is set to on, a compiler error occurs. Se Option Strict è off, il valore viene convertito automaticamente nel Enum tipo.If Option Strict is off, the value is automatically converted to the Enum type.

Se il valore di un membro supera l'intervallo consentito per il tipo di dati sottostante o se si Inizializza un membro sul valore massimo consentito dal tipo di dati sottostante, il compilatore segnala un errore.If the value of a member exceeds the allowable range for the underlying data type, or if you initialize any member to the maximum value allowed by the underlying data type, the compiler reports an error.

ModificatoriModifiers

Per impostazione predefinita, le enumerazioni di membri di classe, struttura, modulo e interfaccia sono di accesso pubblico.Class, structure, module, and interface member enumerations default to public access. È possibile modificare i livelli di accesso con i modificatori di accesso.You can adjust their access levels with the access modifiers. Per impostazione predefinita, le enumerazioni di membri dello spazio dei nomi sono Friend.Namespace member enumerations default to friend access. È possibile modificare i livelli di accesso in pubblico, ma non in privato o protetto.You can adjust their access levels to public, but not to private or protected. Per altre informazioni, vedere livelli di accesso in Visual Basic.For more information, see Access levels in Visual Basic.

Tutti i membri di enumerazione hanno accesso pubblico e non è possibile usare alcun modificatore di accesso.All enumeration members have public access, and you cannot use any access modifiers on them. Tuttavia, se l'enumerazione stessa ha un livello di accesso più limitato, il livello di accesso di enumerazione specificato avrà la precedenza.However, if the enumeration itself has a more restricted access level, the specified enumeration access level takes precedence.

Per impostazione predefinita, tutte le enumerazioni sono tipi e i rispettivi campi sono costanti.By default, all enumerations are types and their fields are constants. Pertanto Shared Static ReadOnly non è possibile utilizzare le parole chiave, e quando si dichiara un'enumerazione o i relativi membri.Therefore the Shared, Static, and ReadOnly keywords cannot be used when declaring an enumeration or its members.

Assegnazione di più valoriAssigning Multiple Values

Le enumerazioni rappresentano in genere valori che si escludono a vicenda.Enumerations typically represent mutually exclusive values. Includendo l' FlagsAttribute attributo nella Enum dichiarazione, è invece possibile assegnare più valori a un'istanza dell'enumerazione.By including the FlagsAttribute attribute in the Enum declaration, you can instead assign multiple values to an instance of the enumeration. L' FlagsAttribute attributo specifica che l'enumerazione deve essere considerata come un campo di bit, ovvero un set di flag.The FlagsAttribute attribute specifies that the enumeration be treated as a bit field, that is, a set of flags. Queste sono denominate enumerazioni bit per bit .These are called bitwise enumerations.

Quando si dichiara un'enumerazione usando l' FlagsAttribute attributo, è consigliabile usare le potenze di 2, ovvero 1, 2, 4, 8, 16 e così via, per i valori.When you declare an enumeration by using the FlagsAttribute attribute, we recommend that you use powers of 2, that is, 1, 2, 4, 8, 16, and so on, for the values. Si consiglia inoltre che "None" sia il nome di un membro il cui valore è 0.We also recommend that "None" be the name of a member whose value is 0. Per ulteriori linee guida, vedere FlagsAttribute e Enum .For additional guidelines, see FlagsAttribute and Enum.

EsempioExample

L'esempio seguente mostra come usare l'istruzione Enum.The following example shows how to use the Enum statement. Si noti che il membro è indicato come EggSizeEnum.Medium e non come Medium .Note that the member is referred to as EggSizeEnum.Medium, and not as 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

EsempioExample

Il metodo nell'esempio seguente è esterno alla Egg classe.The method in the following example is outside the Egg class. Pertanto, EggSizeEnum è completo come Egg.EggSizeEnum .Therefore, EggSizeEnum is fully qualified as 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

EsempioExample

Nell'esempio seguente viene utilizzata l' Enum istruzione per definire un set correlato di valori costanti denominati.The following example uses the Enum statement to define a related set of named constant values. In questo caso, i valori sono i colori che è possibile scegliere per progettare moduli di immissione dati per un database.In this case, the values are colors you might choose to design data entry forms for a database.

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

EsempioExample

Nell'esempio seguente vengono illustrati i valori che includono numeri positivi e negativi.The following example shows values that include both positive and negative numbers.

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

EsempioExample

Nell'esempio seguente As viene usata una clausola per specificare l'oggetto datatype di un'enumerazione.In the following example, an As clause is used to specify the datatype of an enumeration.

Public Enum MyEnum As Byte
    Zero
    One
    Two
End Enum

EsempioExample

Nell'esempio seguente viene illustrato come utilizzare un'enumerazione bit per bit.The following example shows how to use a bitwise enumeration. È possibile assegnare più valori a un'istanza di un'enumerazione bit per bit.Multiple values can be assigned to an instance of a bitwise enumeration. La Enum dichiarazione include l' FlagsAttribute attributo, che indica che l'enumerazione può essere considerata come un set di flag.The Enum declaration includes the FlagsAttribute attribute, which indicates that the enumeration can be treated as a set of flags.

' 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

EsempioExample

Nell'esempio seguente viene iterata un'enumerazione.The following example iterates through an enumeration. Usa il GetNames metodo per recuperare una matrice di nomi di membri dall'enumerazione e GetValues per recuperare una matrice di valori dei membri.It uses the GetNames method to retrieve an array of member names from the enumeration, and GetValues to retrieve an array of member values.

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

Vedere ancheSee also