Instrução Enum (Visual Basic)
Declara uma enumeração e define os valores de seus membros.
Sintaxe
[ <attributelist> ] [ accessmodifier ] [ Shadows ]
Enum enumerationname [ As datatype ]
memberlist
End Enum
Partes
attributelist
Opcional. Lista de atributos que se aplicam a esta enumeração. Você deve colocar a lista de atributos entre colchetes angulares ("
<
" e ">
").O FlagsAttribute atributo indica que o valor de uma instância da enumeração pode incluir vários membros de enumeração e que cada membro representa um campo de bit no valor de enumeração.
accessmodifier
Opcional. Especifica qual código pode acessar essa enumeração. Pode ser um dos seguintes:
Shadows
Opcional. Especifica que essa enumeração redeclariza e oculta um elemento de programação com nome idêntico, ou conjunto de elementos sobrecarregados, em uma classe base. Você pode especificar Shadows somente na enumeração em si, não em qualquer um de seus membros.
enumerationname
Obrigatório. Nome da enumeração. Para obter informações sobre nomes válidos, consulte Nomes de elementos declarados.
datatype
Opcional. Tipo de dados da enumeração e todos os seus membros.
memberlist
Obrigatório. Lista de constantes de membros que estão sendo declaradas nesta instrução. Vários membros aparecem em linhas de código-fonte individuais.
Cada
member
um tem a seguinte sintaxe e partes:[<attribute list>] member name [ = initializer ]
Parte Description membername
Obrigatório. Nome deste membro. initializer
Opcional. Expressão que é avaliada em tempo de compilação e atribuída a este membro. End
Enum
Encerra o
Enum
bloco.
Observações
Se você tiver um conjunto de valores inalteráveis que estão logicamente relacionados entre si, poderá defini-los juntos em uma enumeração. Isso fornece nomes significativos para a enumeração e seus membros, que são mais fáceis de lembrar do que seus valores. Em seguida, você pode usar os membros de enumeração em muitos lugares em seu código.
Os benefícios do uso de enumerações incluem o seguinte:
Reduz os erros causados pela transposição ou digitação incorreta de números.
Facilita a alteração de valores no futuro.
Torna o código mais fácil de ler, o que significa que é menos provável que erros sejam introduzidos.
Garante compatibilidade avançada. Se você usar enumerações, seu código terá menos probabilidade de falhar se, no futuro, alguém alterar os valores correspondentes aos nomes dos membros.
Uma enumeração tem um nome, um tipo de dados subjacente e um conjunto de membros. Cada membro representa uma constante.
Uma enumeração declarada no nível de classe, estrutura, módulo ou interface, fora de qualquer procedimento, é uma enumeração membro. É um membro da classe, estrutura, módulo ou interface que o declara.
As enumerações de membros podem ser acessadas de qualquer lugar dentro de sua classe, estrutura, módulo ou interface. O código fora de uma classe, estrutura ou módulo deve qualificar o nome de uma enumeração membro com o nome dessa classe, estrutura ou módulo. Você pode evitar a necessidade de usar nomes totalmente qualificados adicionando uma instrução Imports ao arquivo de origem.
Uma enumeração declarada no nível de namespace, fora de qualquer classe, estrutura, módulo ou interface, é um membro do namespace no qual ela aparece.
O contexto de declaração para uma enumeração deve ser um arquivo de origem, namespace, classe, estrutura, módulo ou interface, e não pode ser um procedimento. Para obter mais informações, consulte Contextos de declaração e níveis de acesso padrão.
Você pode aplicar atributos a uma enumeração como um todo, mas não a seus membros individualmente. Um atributo contribui com informações para os metadados do assembly.
Tipo de Dados
A Enum
instrução pode declarar o tipo de dados de uma enumeração. Cada membro usa o tipo de dados da enumeração. Você pode especificar Byte
, Integer
, Long
, , SByte
, UInteger
Short
, ULong
, ou UShort
.
Se você não especificar datatype
para a enumeração, cada membro usará o tipo de dados de seu initializer
. Se você especificar ambos datatype
e initializer
, o tipo de dados de initializer
deverá ser conversível em datatype
. Se nem datatype
estiver initializer
presente, o tipo de dados assume Integer
como padrão .
Inicializando membros
A Enum
instrução pode inicializar o conteúdo dos membros selecionados no memberlist
. Você usa initializer
para fornecer uma expressão a ser atribuída ao membro.
Se você não especificar initializer
para um membro, Visual Basic inicializa-lo para zero (se for o primeiro member
em memberlist
) ou para um valor maior por um do que o imediatamente anterior member
.
A expressão fornecida em cada initializer
um pode ser qualquer combinação de literais, outras constantes que já estão definidas e membros de enumeração que já estão definidos, incluindo um membro anterior dessa enumeração. Você pode usar operadores aritméticos e lógicos para combinar esses elementos.
Não é possível usar variáveis ou funções no initializer
. No entanto, você pode usar palavras-chave de conversão, como CByte
e CShort
. Você também pode usar AscW
se você chamá-lo com uma constante String
ou Char
argumento, uma vez que isso pode ser avaliado em tempo de compilação.
As enumerações não podem ter valores de vírgula flutuante. Se um membro recebe um valor de ponto flutuante e Option Strict
é definido como ativado, ocorre um erro do compilador. Se Option Strict
estiver desativado, o valor é convertido automaticamente para o Enum
tipo.
Se o valor de um membro exceder o intervalo permitido para o tipo de dados subjacente, ou se você inicializar qualquer membro para o valor máximo permitido pelo tipo de dados subjacente, o compilador relatará um erro.
Modificadores
Enumerações de classe, estrutura, módulo e membro da interface padrão para acesso público. Você pode ajustar seus níveis de acesso com os modificadores de acesso. Enumerações de membros de namespace padrão para acesso de amigo. Você pode ajustar seus níveis de acesso para público, mas não para privado ou protegido. Para obter mais informações, consulte Níveis de acesso no Visual Basic.
Todos os membros da enumeração têm acesso público e você não pode usar nenhum modificador de acesso neles. No entanto, se a enumeração em si tiver um nível de acesso mais restrito, o nível de acesso de enumeração especificado terá precedência.
Por padrão, todas as enumerações são tipos e seus campos são constantes. Portanto, o , Static
e ReadOnly
palavras-chave Shared
não podem ser usados ao declarar uma enumeração ou seus membros.
Atribuindo vários valores
As enumerações normalmente representam valores mutuamente exclusivos. Ao incluir o FlagsAttribute Enum
atributo na declaração, você pode, em vez disso, atribuir vários valores a uma instância da enumeração. O FlagsAttribute atributo especifica que a enumeração seja tratada como um campo bit, ou seja, um conjunto de sinalizadores. Estas são chamadas enumerações bitwise .
Quando você declara uma enumeração usando o FlagsAttribute atributo, recomendamos que você use poderes de 2, ou seja, 1, 2, 4, 8, 16 e assim por diante, para os valores. Também recomendamos que "Nenhum" seja o nome de um membro cujo valor é 0. Para obter diretrizes adicionais, consulte FlagsAttribute e Enum.
Exemplo 1
O exemplo a seguir mostra como usar a Enum
instrução. Observe que o membro é referido como EggSizeEnum.Medium
, e não como 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
Exemplo 2
O método no exemplo a seguir está fora da Egg
classe. Portanto, EggSizeEnum
é totalmente qualificado como 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
Exemplo 3
O exemplo a seguir usa a Enum
instrução para definir um conjunto relacionado de valores constantes nomeados. Nesse caso, os valores são cores que você pode escolher para criar formulários de entrada de dados para um banco de dados.
Public Enum InterfaceColors
MistyRose = &HE1E4FF&
SlateGray = &H908070&
DodgerBlue = &HFF901E&
DeepSkyBlue = &HFFBF00&
SpringGreen = &H7FFF00&
ForestGreen = &H228B22&
Goldenrod = &H20A5DA&
Firebrick = &H2222B2&
End Enum
Exemplo 4
O exemplo a seguir mostra valores que incluem números positivos e negativos.
Enum SecurityLevel
IllegalEntry = -1
MinimumSecurity = 0
MaximumSecurity = 1
End Enum
Exemplo 5
No exemplo a seguir, uma As
cláusula é usada para especificar o datatype
de uma enumeração.
Public Enum MyEnum As Byte
Zero
One
Two
End Enum
Exemplo 6
O exemplo a seguir mostra como usar uma enumeração bitwise. Vários valores podem ser atribuídos a uma instância de uma enumeração bitwise. A Enum
declaração inclui o FlagsAttribute atributo, que indica que a enumeração pode ser tratada como um conjunto de sinalizadores.
' 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
Exemplo 7
O exemplo a seguir itera por meio de uma enumeração. Ele usa o GetNames método para recuperar uma matriz de nomes de membros da enumeração e GetValues para recuperar uma matriz de valores de 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