Condividi tramite


Istruzione Enum (Visual Basic)

Dichiara un'enumerazione e definisce i valori dei relativi membri.

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

Parti

Parte

Descrizione

attributelist

Parametro facoltativo. Elenco di attributi applicabili all'enumerazione. È necessario racchiudere il l'elenco attributi parentesi angolari ("<"e">").

Il 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 del valore di enumerazione.

accessmodifier

Parametro facoltativo. Specifica il tipo di codice che può accedere all'enumerazione, ad esempio uno dei seguenti:

È possibile specificare Protected Friend per consentire l'accesso dal codice incluso nella classe dell'enumerazione, in una classe derivata o nello stesso assembly.

Shadows

Parametro facoltativo. Specifica che l'enumerazione ridichiara e nasconde un elemento di programmazione omonimo, o un insieme di elementi di overload, di una classe base. È possibile specificare Shadows solo sull'enumerazione, non sui relativi membri.

enumerationname

Obbligatorio. Nome dell'enumerazione. Per informazioni sui nomi validi , vedere Nomi di elementi dichiarati (Visual Basic).

datatype

Parametro facoltativo. Tipo di dati dell'enumerazione e di tutti i relativi membri.

memberlist

Obbligatorio. Elenco delle costanti dei membri dichiarate in questa istruzione. Più membri vengono visualizzati su singole righe del codice sorgente.

Ciascun member è caratterizzato dalla sintassi e dalle parti seguenti: [<attribute list>] member name [ = initializer ]

Parte

Descrizione

membername

Obbligatorio. Nome del membro.

initializer

Parametro facoltativo. Espressione valutata in fase di compilazione e assegnata al membro.

End Enum

Termina il blocco Enum.

Note

Un set di valori fissi correlati tra loro in modo logico possono essere definiti insieme in un'enumerazione. In tal modo vengono assegnati all'enumerazione e ai membri nomi significativi che è possibile ricordare più facilmente rispetto ai relativi valori. È quindi possibile utilizzare i membri dell'enumerazione in numerose posizioni del codice.

I vantaggi dell'utilizzo di enumerazioni comprendono le seguenti operazioni:

  • Riduzione degli errori causati dalla trasposizione o dall'errata digitazione dei numeri.

  • Semplificazione delle successive operazioni di modifica ai valori.

  • Rende il codice più leggibile, significa che è meno probabile che gli errori verranno introdotte.

  • Garanzia di compatibilità con le versioni future. Se si utilizzano le enumerazioni, il codice è meno probabile che se in futuro un utente modifica i valori corrispondenti ai nomi dei membri.

Un'enumerazione ha un nome, un tipo di dati sottostante e un set di membri. Ogni membro rappresenta una costante.

Un'enumerazione dichiarata a livello di interfaccia, all'esterno di qualsiasi routine, struttura, modulo o di classe è un enumerazione membro. È un membro della classe, struttura, modulo o interfaccia che lo dichiara.

Le enumerazioni dei membri sono accessibili da un punto qualsiasi all'interno della loro classe, struttura, modulo o interfaccia. Il codice al di fuori di una classe, di una struttura o di un modulo deve qualificare il nome di un'enumerazione di membri con il nome di tale classe, struttura o modulo. È possibile evitare la necessità di utilizzare nomi completi mediante l'aggiunta di un Imports istruzione per il file di origine.

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.

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 routine. Per ulteriori informazioni, vedere Contesti delle dichiarazioni e livelli di accesso predefiniti (Visual Basic).

È possibile applicare attributi a un'intera enumerazione, ma non singolarmente ai relativi membri. Un attributo fornisce informazioni ai metadati dell'assembly.

Tipo di dati

L'istruzione Enum può dichiarare il tipo di dati di un'enumerazione. A ciascun membro viene attribuito il tipo di dati dell'enumerazione. È possibile specificare Byte, Integer, Long, SByte, Short, UInteger, ULong o UShort.

Se non si specifica il valore di datatype per l'enumerazione, a ogni membro viene attribuito il tipo di dati del relativo oggetto initializer. Se si specificano sia la parte datatype che la parte initializer, il tipo di dati di initializer deve poter essere convertito in datatype. Se non vengono specificate né datatype né initializer, verrà utilizzato il tipo di dati predefinito Integer.

L'inizializzazione di membri

L'istruzione Enum è in grado di inizializzare il contenuto di membri selezionati in un oggetto memberlist. Per fornire un'espressione da assegnare al membro, viene utilizzata la parte initializer.

Se non si specifica la parte initializer per un membro, quest'ultimo viene inizializzato con zero (se si tratta del primo member in memberlist) oppure con un valore maggiore di uno rispetto al member immediatamente precedente.

L'espressione fornita in ciascun initializer può essere una qualsiasi combinazione di valori letterali, altre costanti e membri di enumerazione già definiti, incluso un membro precedente di tale enumerazione. Per combinare tali elementi è possibile utilizzare operatori aritmetici e logici.

Nella parte initializer non è possibile utilizzare variabili o funzioni, ma è consentito l'utilizzo di parole chiave di conversione quali CByte e CShort. È inoltre possibile utilizzare AscW, se lo si chiama con una costante String o un argomento Char, poiché è possibile eseguirne la valutazione in fase di compilazione.

Non è consentito assegnare alle enumerazioni valori a virgola mobile. Se un membro viene assegnato un valore in virgola mobile e Option Strict è impostata su on, si verifica un errore del compilatore. Se Option Strict è disattivata, il valore viene convertito automaticamente per la Enum tipo.

Se il valore di un membro supera l'intervallo consentito per il tipo di dati sottostante o se si inizializza un membro al valore massimo consentito dal tipo di dati sottostante, il compilatore rileva un errore.

Modificatori

Per impostazione predefinita, le enumerazioni dei membri di classe, struttura, modulo e interfaccia dispongono di accesso Public. È possibile modificarne i livelli di accesso mediante gli appositi modificatori. Per impostazione predefinita, le enumerazioni dei membri dello spazio dei nomi dispongono di accesso Friend. È possibile modificarne i livelli di accesso in Public, ma non in Private o Protected. Per ulteriori informazioni, vedere Livelli di accesso in Visual Basic.

Tutti i membri di un'enumerazione dispongono di accesso pubblico e non consentono l'utilizzo di alcun modificatore di accesso. Se tuttavia l'enumerazione dispone di un livello di accesso più limitato, viene applicato il livello di accesso specificato per l'enumerazione.

Per impostazione predefinita, tutte le enumerazioni sono tipi e i relativi campi sono costanti. Pertanto le parole chiave Shared, Static e ReadOnly non possono essere utilizzate per la dichiarazione di un'enumerazione o dei relativi membri.

Assegnazione di valori multipli

Le enumerazioni sono in genere rappresentano valori si escludono a vicenda. Includendo il FlagsAttribute di attributo nel Enum dichiarazione, è invece possibile assegnare valori multipli per un'istanza dell'enumerazione. Il FlagsAttribute attributo specifica che l'enumerazione essere considerato come un campo di bit, ovvero un insieme di flag. Questi sono denominati OR bit per bit le enumerazioni.

Quando si dichiara un'enumerazione utilizzando il FlagsAttribute attributo, si consiglia di utilizzare la potenza di 2, che è, 1, 2, 4, 8, 16 e così via, per i valori. È inoltre consigliabile che "Nessuno" è il nome di un membro il cui valore è 0. Per ulteriori informazioni, vedere FlagsAttribute e Enum.

Esempio

Nell'esempio riportato di seguito viene illustrato come utilizzare il Enum istruzione. Si noti che il membro viene definito come EggSizeEnum.Mediume non come 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

Il metodo nell'esempio che segue non è compreso il Egg classe. Di conseguenza, EggSizeEnum è un nome completo come 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

Nell'esempio riportato di seguito viene utilizzata l'istruzione Enum per definire un insieme correlato di valori costanti denominati. Nel caso specifico, i valori rappresentano i colori che è possibile scegliere per la definizione di form per l'immissione di dati in un database.

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

Nell'esempio riportato di seguito vengono illustrati valori che includono numeri sia positivi che negativi.

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

Nell'esempio seguente, un As clausola viene utilizzata per specificare il datatype di un'enumerazione.

Public Enum MyEnum As Byte
  Zero
  One
  Two
End Enum

Nell'esempio riportato di seguito viene illustrato come utilizzare un'enumerazione bit per bit. Valori multipli possono essere assegnati a un'istanza di un'enumerazione bit per bit. Il Enum dichiarazione include il FlagsAttribute attributo, che indica che l'enumerazione può essere considerato come un insieme di flag.

' 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

Nell'esempio seguente viene eseguito lo scorrimento un'enumerazione. Utilizza il GetNames metodo per recuperare una matrice di nomi di membri dell'enumerazione e GetValues per recuperare una matrice dei valori dei membri.

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 anche

Riferimenti

Enum

Istruzione Const (Visual Basic)

Istruzione Dim (Visual Basic)

Funzioni di conversione del tipo (Visual Basic)

AscW

Concetti

Conversioni implicite ed esplicite (Visual Basic)

Costanti ed enumerazioni (Visual Basic)