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

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

    Il FlagsAttribute attributo indica che il valore di un'istanza dell'enumerazione può includere più membri dell'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

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

  • Shadows

    Facoltativo.Optional. Specifica che questa enumerazione ridichiara e nasconde un elemento di programmazione omonimo o un set di elementi in overload, una classe di base.Specifies that this enumeration redeclares and hides an identically named programming element, or set of overloaded elements, in a base class. È possibile specificare Shadows solo sull'enumerazione stessa, non sui 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 Declared Element Names.For information on valid names, see Declared Element Names.

  • datatype

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

  • memberlist

    Obbligatorio.Required. Elenco di costanti di membro dichiarate in questa istruzione.List of member constants being declared in this statement. Più membri vengono visualizzati su righe di codice sorgente singoli.Multiple members appear on individual source code lines.

    Ogni member ha 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 Facoltativo.Optional. Espressione che viene valutata in fase di compilazione e assegnato 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.

NoteRemarks

Se si dispone di un set di valori costanti che sono correlate logicamente 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. Ciò 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 dell'enumerazione in molte posizioni nel codice.You can then use the enumeration members in many places in your code.

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

  • Consente di ridurre gli errori causati da trasporre o errata digitazione numeri.Reduces errors caused by transposing or mistyping numbers.

  • Semplifica modificare i valori in futuro.Makes it easy to change values in the future.

  • Rende il codice più leggibile, ciò significa che è meno probabile che verranno introdotti errori.Makes code easier to read, which means it is less likely that errors will be introduced.

  • Assicura la compatibilità.Ensures forward compatibility. Se si utilizzano le enumerazioni, il codice è meno probabile che se in futuro un utente 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, 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 nella classe, struttura, modulo o a livello di interfaccia, all'esterno di qualsiasi routine è una enumerazione membro.An enumeration declared at class, structure, module, or interface level, outside any procedure, is a member enumeration. È un membro della classe, struttura, modulo o dell'interfaccia che lo dichiara.It is a member of the class, structure, module, or interface that declares it.

Le enumerazioni dei membri sono accessibili da ovunque la classe, struttura, modulo o interfaccia.Member enumerations can be accessed from anywhere within their class, structure, module, or interface. Codice esterno di una classe, struttura o un modulo necessario qualificare il nome di un'enumerazione di membri con il nome di tale classe, struttura o modulo.Code outside a class, structure, or module must qualify a member enumeration's name with the name of that class, structure, or module. È possibile evitare la necessità di utilizzare nomi pienamente qualificati mediante l'aggiunta di un importazioni istruzione nel 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 è presente.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 della dichiarazione per un'enumerazione deve essere un file di origine, lo spazio dei nomi, classe, struttura, modulo o interfaccia e non può essere una procedura.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 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 per i metadati dell'assembly.An attribute contributes information to the assembly's metadata.

Tipo di datiData Type

Il 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 relativo initializer.If you do not specify datatype for the enumeration, each member takes the data type of its initializer. Se si specificano entrambe datatype e initializer, il tipo di dati initializer deve essere convertibile in datatype.If you specify both datatype and initializer, the data type of initializer must be convertible to datatype. Se nessuno di essi datatypeinitializer è presente, il valore predefinito è di tipo di dati Integer.If neither datatype nor initializer is present, the data type defaults to Integer.

L'inizializzazione dei membriInitializing Members

Il Enum istruzione possibile inizializzare il contenuto dei membri selezionati in memberlist.The Enum statement can initialize the contents of selected members in memberlist. Si utilizza 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, oggetto visivo viene inizializzato su zero (se è il primo member nelle memberlist), o su un valore maggiore di uno rispetto a quello di 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 ciascun initializer può essere qualsiasi combinazione di valori letterali, altre costanti che sono già definite e membri di enumerazione che sono già definiti, tra cui 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. È possibile utilizzare gli operatori logici e aritmetici per combinare tali elementi.You can use arithmetic and logical operators to combine such elements.

È possibile usare le variabili o funzioni in initializer.You cannot use variables or functions in initializer. Tuttavia, è possibile utilizzare 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 viene chiamata con una costante String o Char argomento, dal momento che possono essere valutati 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 un membro viene assegnato un valore a virgola mobile e Option Strict è impostata 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 è disattivata, 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 del 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

Classe, struttura, modulo e predefinito di enumerazioni membro di interfaccia per l'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. Namespace membro enumerazioni per impostazione predefinita l'accesso friend.Namespace member enumerations default to friend access. È possibile modificare i livelli di accesso pubblico, ma non a privati o protetti.You can adjust their access levels to public, but not to private or protected. Per altre informazioni, vedere Access levels in Visual Basic.For more information, see Access levels in Visual Basic.

Tutti i membri di enumerazione hanno l'accesso pubblico e non è possibile utilizzare tutti i modificatori di accesso su di essi.All enumeration members have public access, and you cannot use any access modifiers on them. Tuttavia, se l'enumerazione dispone di un livello di accesso più limitato, il livello di accesso enumerazione specificata ha 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 relativi campi sono costanti.By default, all enumerations are types and their fields are constants. Di conseguenza il Shared, Static, e ReadOnly parole chiave non possono essere usate 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

Enumerazioni rappresentano in genere valori si escludono a vicenda.Enumerations typically represent mutually exclusive values. Includendo il FlagsAttribute attributo la Enum dichiarazione, si possono invece 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. Il FlagsAttribute attributo specifica che l'enumerazione vengono considerati come un campo di bit, vale a dire, un set di flag.The FlagsAttribute attribute specifies that the enumeration be treated as a bit field, that is, a set of flags. Questi sono denominati bit per bit enumerazioni.These are called bitwise enumerations.

Quando si dichiara un'enumerazione utilizzando il FlagsAttribute attributo, è consigliabile usare 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. È inoltre consigliabile 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 altre indicazioni, 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 è detta EggSizeEnum.Mediume 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

Nell'esempio seguente il metodo non è compreso il Egg classe.The method in the following example is outside the Egg class. Pertanto EggSizeEnum è un nome 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

L'esempio seguente usa il Enum istruzione per definire un set correlato di denominato valori costanti.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 di progettare il form di immissione di 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 mostra 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, un' As clausola viene utilizzata per specificare il 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. Più valori possono essere assegnati a un'istanza di un'enumerazione bit per bit.Multiple values can be assigned to an instance of a bitwise enumeration. Il Enum dichiarazione include il FlagsAttribute attributo, che indica che l'enumerazione può essere considerato 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 esegue l'iterazione attraverso un'enumerazione.The following example iterates through an enumeration. Usa il GetNames metodo per recuperare una matrice di nomi dei membri dell'enumerazione e GetValues per recuperare una matrice dei valori del membro.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