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 ]
|
||||||
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
Istruzione Const (Visual Basic)
Funzioni di conversione del tipo (Visual Basic)