Compartilhar via


Instrução Enum (Visual Basic)

Declara uma enumeração e define os valores de seus membros.

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

Partes

Parte

Descrição

attributelist

Opcional. Lista de atributos que se aplicam a essa enumeração. Você deve colocar o lista de atributos colchetes angulares ("<"e">").

O FlagsAttribute atributo indica que o valor de uma instância de 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 o código que pode acessar essa enumeração. Pode ser um dos seguintes:

Você pode especificar Protected Friend para permitir o acesso a partir de código dentro de enumeração da classe, uma classe derivada ou do mesmo conjunto.

Shadows

Opcional. Especifica que enumeração redeclara e oculta um elemento de programação de nome idêntico, ou conjunto de elementos sobrecarregados, na classe base. Você pode especificar Shadows somente na enumeração em si, não em qualquer um dos seus membros.

enumerationname

Necessário. Nome da enumeração. Para obter informações sobre nomes válidos, consulte Nomes de elemento declarados (Visual Basic).

datatype

Opcional. Tipo de dados de enumeração e todos os seus membros.

memberlist

Necessário. Lista de constantes de membro sendo declarada nessa instrução. Vários membros aparecem em linhas individuais de código-fonte.

Cada member possui a seguinte sintaxe e partes: [<attribute list>] member name [ = initializer ]

Parte

Descrição

membername

Necessário. Nome desse membro.

initializer

Opcional. Expressão que é avaliada em tempo de compilação e atribuída a este membro.

End Enum

Encerra o bloco Enum.

Comentários

Se você tiver um conjunto de valores sem variação que são logicamente relacionados uns aos outros, você pode 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 que seus valores. Em seguida, você pode usar os membros de enumeração em muitos locais no seu código.

Os benefícios de usar enumerações incluem o seguinte:

  • Reduz os erros causados por transpô ou números de erros de digitação.

  • Torna fácil alterar os valores no futuro.

  • Torna o código mais fácil de ler, que significa que é menos provável que os erros serão introduzidos.

  • Garante a compatibilidade. Se você usar enumerações, seu código é menos provável falha se no futuro alguém altera os valores correspondentes aos nomes de membro.

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 interface, fora de qualquer procedimento, estrutura, módulo ou classe é uma enumeração membro. É membro da classe, estrutura, módulo ou interface que declara.

Enumerações de membro podem ser acessadas de qualquer lugar dentro de sua classe, estrutura, módulo ou interface. Código fora de uma classe, estrutura, ou módulo deve qualificar um nome de enumeração de membro com o nome dessa classe, estrutura ou módulo. Você pode evitar a necessidade de usar nomes totalmente qualificados, adicionando um importações instrução 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 ele aparece.

O 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 mais informações, consulte Contextos de declaração e níveis de acesso padrão (Visual Basic).

Você pode aplicar atributos a uma enumeração como um todo, mas não a seus membros individualmente. Um atributo contribui com as informações de metadados do conjunto.

Tipo de dados

A instrução Enum pode declarar o tipo de dados de uma enumeração. Cada membro leva a enumeração do tipo de dados. Você pode especificar Byte, Integer, Long, SByte, Short, UInteger, ULong, ou UShort.

Se você não especificar datatype para a enumeração, cada membro tem o tipo de dados de seu initializer. Se você especificar datatype e initializer, o tipo de dados do initializer deve ser conversível para datatype. Se nem datatype nem initializer estiverem presentes, o tipo de dados padrão é Integer.

Inicializando membros

O Enum instrução pode inicializar o conteúdo dos membros selecionados na 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 o inicializa com zero (se ele for o primeiro member no memberlist), ou para um valor maior que o do member imediatamente anterior.

A expressão fornecida em cada initializer 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.

Você não pode 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 argumento Char, desde que possa ser avaliado em tempo de compilação.

Enumerações não podem ter valores de ponto flutuante. Se um membro é atribuído um valor de ponto flutuante e Option Strict é definida como on, ocorre um erro de compilador. Se Option Strict está desativado, o valor é automaticamente convertido para o Enum tipo.

Se o valor de um membro exceder o intervalo permitido para o tipo de dados sobrejacente, ou se você inicializar qualquer membro com o máximo valor permitido pelo tipo de dados sobrejacente, o compilador reportará um erro.

Modificadores

Enumerações de membros de classe, estrutura, módulo e interface têm acesso público como padrão. Você pode ajustar seus níveis de acesso com os modificadores de acesso. Enumerações para membro de namespace tem como padrão acesso friend. Você pode ajustar os níveis de acesso para público, mas não para private ou protected. Para mais informações, consulte Níveis de acesso no Visual Basic.

Todos os membros de enumeração têm acesso público, e você não pode usar quaisquer modificadores de acesso neles. No entanto, se a própria enumeração tem um nível de acesso mais restrito, o nível de acesso especificado enumeração tem precedência.

Por padrão, todas as enumerações são tipos e seus campos são constantes. Portanto, as palavras-chave Shared, Static, e ReadOnly não podem ser usadas quando se declara uma enumeração ou seus membros.

Atribuindo valores múltiplos

Enumerações geralmente representam valores mutuamente exclusivos. Incluindo o FlagsAttribute de atributo na Enum declaração, você pode em vez disso, atribuir vários valores para uma instância da enumeração. O FlagsAttribute atributo especifica a enumeração ser tratada como um campo de bits, ou seja, um conjunto de sinalizadores. Esses são chamados de bit a bit enumerações.

Quando você declara uma enumeração usando o FlagsAttribute atributo, recomendamos que você use potências de 2, que é, 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

O exemplo a seguir mostra como usar o Enum instrução. Observe que o membro é chamado de EggSizeEnum.Mediume 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

O método no exemplo a seguir está fora do 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

O exemplo a seguir utiliza a instrução Enum para definir um conjunto relacionado de valores constantes nomeados. Nesse caso, os valores são cores que você pode escolher para criar formulários para um banco de dados de entrada de dados.

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

O exemplo a seguir mostra os valores que incluem números tanto positivos quanto negativos.

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

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

O exemplo a seguir mostra como usar uma enumeração bit a bit. Múltiplos valores podem ser atribuídos a uma instância de uma enumeração bit a bit. O 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

O exemplo a seguir itera por meio de uma enumeração. Ele usa o GetNames método para recuperar uma matriz de nomes de membro de 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

Consulte também

Referência

Enum

Instrução Const (Visual Basic)

Instrução Dim (Visual Basic)

Funções de conversão do tipo (Visual Basic)

AscW

Conceitos

Conversões implícitas e explícitas (Visual Basic)

Constantes e enumerações (Visual Basic)