Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Dichiara un'enumerazione e definisce i valori dei relativi membri.
Sintassi
[ <attributelist> ] [ accessmodifier ] [ Shadows ]
Enum enumerationname [ As datatype ]
memberlist
End Enum
Parti
attributelistOpzionale. Elenco di attributi applicabili a questa enumerazione. È necessario racchiudere l'elenco di attributi tra parentesi angolari ("
<" e ">").L'attributo FlagsAttribute 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.
accessmodifierOpzionale. Specifica il codice che può accedere a questa enumerazione. Può essere uno dei seguenti:
ShadowsOpzionale. Specifica che questa enumerazione ripete e nasconde un elemento di programmazione con nome identico o un set di elementi di overload in una classe base. È possibile specificare Shadows solo sull'enumerazione stessa, non su nessuno dei relativi membri.
enumerationnameObbligatorio. Nome dell'enumerazione. Per informazioni sui nomi validi, vedere Nomi di elementi dichiarati.
datatypeOpzionale. Tipo di dati dell'enumerazione e di tutti i relativi membri.
memberlistObbligatorio. Elenco di costanti membro dichiarate in questa istruzione. Più membri vengono visualizzati su singole righe di codice sorgente.
Ognuno
memberha la sintassi e le parti seguenti:[<attribute list>] membername [ = initializer ]Parte Descrizione membernameObbligatorio. Nome del membro. initializerOpzionale. Espressione valutata in fase di compilazione e assegnata a questo membro. EndEnumTermina il
Enumblocco.
Osservazioni:
Se si dispone di un set di valori non modificabili correlati logicamente tra loro, è possibile definirli insieme in un'enumerazione. In questo modo vengono forniti nomi significativi per l'enumerazione e i relativi membri, che sono più facili da ricordare rispetto ai relativi valori. È quindi possibile usare i membri di enumerazione in molte posizioni nel codice.
I vantaggi dell'uso delle enumerazioni includono quanto segue:
Riduce gli errori causati dalla trasposizione o dalla digitazione errata dei numeri.
Semplifica la modifica dei valori in futuro.
Semplifica la lettura del codice, il che significa che è meno probabile che vengano introdotti errori.
Assicura la compatibilità con le versioni successive. Se si usano enumerazioni, è meno probabile che il codice abbia esito negativo se in futuro qualcuno 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 classe, struttura, modulo o interfaccia, all'esterno di qualsiasi routine, è un'enumerazione membro. È un membro della classe, della struttura, del modulo o dell'interfaccia che la dichiara.
È possibile accedere alle enumerazioni dei membri da qualsiasi posizione all'interno della classe, della struttura, del modulo o dell'interfaccia. Il codice esterno a una classe, una struttura o un modulo deve qualificare il nome dell'enumerazione di un membro con il nome di tale classe, struttura o modulo. È possibile evitare la necessità di usare nomi completi aggiungendo un'istruzione Imports al 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 visualizzato.
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. Per altre informazioni, vedere Contesti di dichiarazione e livelli di accesso predefiniti.
È possibile applicare attributi a un'enumerazione nel suo complesso, ma non ai relativi membri singolarmente. Un attributo contribuisce a fornire informazioni ai metadati dell'assembly.
Tipo di dati
L'istruzione Enum può dichiarare il tipo di dati di un'enumerazione. Ogni membro accetta il tipo di dati dell'enumerazione. È possibile specificare Byte, IntegerLong, SByte, Short, UInteger, , ULongo UShort.
Se non si specifica datatype per l'enumerazione , ogni membro accetta il tipo di dati del relativo initializer. Se si specificano sia datatype che initializer, il tipo di dati di initializer deve essere convertibile in datatype. Se né datatype né initializer è presente, per impostazione predefinita il tipo di dati è Integer.
Inizializzazione dei membri
L'istruzione Enum può inizializzare il contenuto dei membri selezionati in memberlist.
initializer Usare per fornire un'espressione da assegnare al membro.
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 di quello dell'oggetto immediatamente precedente member.
L'espressione fornita in ogni initializer oggetto può essere qualsiasi combinazione di valori letterali, altre costanti già definite e membri di enumerazione già definiti, incluso un membro precedente di questa enumerazione. È possibile usare operatori aritmetici e logici per combinare tali elementi.
Non è possibile usare variabili o funzioni in initializer. Tuttavia, è possibile usare parole chiave di conversione come CByte e CShort. È anche possibile usare AscW se viene chiamato con una costante String o Char un argomento, perché può essere valutato in fase di compilazione.
Le enumerazioni non possono avere valori a virgola mobile. Se a un membro viene assegnato un valore a virgola mobile e Option Strict viene impostato su attivato, si verifica un errore del compilatore. Se Option Strict è disattivato, il valore viene convertito automaticamente nel 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 segnala un errore.
Modificatori
Per impostazione predefinita, le enumerazioni di classe, struttura, modulo e membro dell'interfaccia sono pubbliche. È possibile regolare i livelli di accesso con i modificatori di accesso. Per impostazione predefinita, le enumerazioni membro dello spazio dei nomi sono accesso friend. È possibile regolare i livelli di accesso in pubblico, ma non in privato o protetto. Per altre informazioni, vedere Livelli di accesso in Visual Basic.
Tutti i membri dell'enumerazione dispongono dell'accesso pubblico e non è possibile usare modificatori di accesso. Tuttavia, se l'enumerazione stessa ha un livello di accesso più limitato, il livello di accesso di enumerazione specificato ha la precedenza.
Per impostazione predefinita, tutte le enumerazioni sono tipi e i relativi campi sono costanti. Non è pertanto possibile utilizzare le Sharedparole chiave , Statice ReadOnly quando si dichiara un'enumerazione o i relativi membri.
Assegnazione di più valori
Le enumerazioni rappresentano in genere valori che si escludono a vicenda. Includendo l'attributo FlagsAttribute nella Enum dichiarazione, è invece possibile assegnare più valori a un'istanza dell'enumerazione . L'attributo FlagsAttribute specifica che l'enumerazione deve essere considerata come un campo di bit, ovvero un set di flag. Queste sono denominate enumerazioni bit per bit .
Quando si dichiara un'enumerazione usando l'attributo FlagsAttribute , è consigliabile usare poteri pari a 2, ovvero 1, 2, 4, 8, 16 e così via, per i valori. È inoltre consigliabile che "Nessuno" sia il nome di un membro il cui valore è 0. Per altre linee guida, vedere FlagsAttribute e Enum.
Esempio 1
Nell'esempio seguente viene illustrato come usare l'istruzione Enum . Si noti che il membro viene definito 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
Esempio 2
Il metodo nell'esempio seguente si trova all'esterno della Egg classe . Pertanto, EggSizeEnum è 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
Esempio 3
Nell'esempio seguente viene utilizzata l'istruzione Enum per definire un set correlato di valori costanti denominati. In questo caso, i valori sono colori che è possibile scegliere di progettare moduli di immissione dati per un database.
Public Enum InterfaceColors
MistyRose = &HE1E4FF&
SlateGray = &H908070&
DodgerBlue = &HFF901E&
DeepSkyBlue = &HFFBF00&
SpringGreen = &H7FFF00&
ForestGreen = &H228B22&
Goldenrod = &H20A5DA&
Firebrick = &H2222B2&
End Enum
Esempio 4
L'esempio seguente mostra i valori che includono numeri positivi e negativi.
Enum SecurityLevel
IllegalEntry = -1
MinimumSecurity = 0
MaximumSecurity = 1
End Enum
Esempio 5
Nell'esempio seguente viene utilizzata una As clausola per specificare l'oggetto datatype di un'enumerazione .
Public Enum MyEnum As Byte
Zero
One
Two
End Enum
Esempio 6
Nell'esempio seguente viene illustrato come usare un'enumerazione bit per bit. È possibile assegnare più valori a un'istanza di un'enumerazione bit per bit. La Enum dichiarazione include l'attributo FlagsAttribute , che indica che l'enumerazione può essere considerata come un set 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
Esempio 7
Nell'esempio seguente viene eseguita un'enumerazione . Usa il GetNames metodo per recuperare una matrice di nomi di membri dall'enumerazione e GetValues per recuperare una matrice di valori membro.
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