Share via


Instrucción Enum (Visual Basic)

Declara una enumeración y define los valores de sus miembros.

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

Elementos

Parte

Descripción

attributelist

Opcional. Lista de atributos que se aplican a esta enumeración. Debe incluir el lista de atributos en corchetes angulares ("<"y">").

El FlagsAttribute atributo indica que el valor de una instancia de la enumeración puede incluir varios miembros de enumeración y que cada miembro representa un campo de bits en el valor de enumeración.

accessmodifier

Opcional. Especifica qué código puede tener acceso a esta enumeración. Puede ser una de las siguientes:

Puede especificar Protected Friend para permitir el acceso desde el código dentro de la clase de la enumeración o desde el mismo ensamblado.

Shadows

Opcional. Especifica que esta enumeración vuelve a declarar y ocultar un elemento de programación denominado de forma idéntica, o un conjunto de elementos sobrecargados, en una clase base. Sólo puede especificar Shadows en la propia enumeración y no en ninguno de sus miembros.

enumerationname

Obligatorio. Nombre de la enumeración. Para obtener más información sobre qué nombres son válidos, vea Nombres de elementos declarados (Visual Basic).

datatype

Opcional. Tipos de datos de la enumeración y de todos sus miembros.

memberlist

Obligatorio. Lista de constantes de miembros que se declara en esta instrucción. Varios miembros aparecen en líneas de código fuente individuales.

Cada member tiene la sintaxis y las partes siguientes: [<attribute list>] member name [ = initializer ]

Parte

Descripción

membername

Obligatorio. Nombre de este miembro.

initializer

Opcional. Expresión que se evalúa en tiempo de compilación y se asigna a este miembro.

End Enum

Termina el bloque Enum.

Comentarios

Si tiene un conjunto de valores inalterables que se relacionan lógicamente entre sí, puede definirlos juntos en una enumeración. Esto proporciona nombres descriptivos para la enumeración y sus miembros que son más fáciles de recordar que sus valores. Puede utilizar los miembros de la enumeración en muchos lugares de su código.

Las ventajas de utilizar enumeraciones incluyen lo siguiente:

  • Reducir los errores producidos por números transpuestos o mal escritos.

  • Facilitar el cambio de valores en el futuro.

  • Hace el código más fácil de leer, lo que significa que es menos probable que se introducirán errores.

  • Garantizar la compatibilidad futura. Si utiliza las enumeraciones, el código es menos propenso a errores si en el futuro que alguien cambia los valores correspondientes a los nombres de miembro.

Una enumeración tiene un nombre, un tipo de datos subyacente y un conjunto de miembros. Cada miembro representa una constante.

Una enumeración declarada en la clase, estructura, módulo o nivel de interfaz, fuera de cualquier procedimiento, es un enumeración de miembros. Es un miembro de la clase, estructura, módulo o interfaz que lo declara.

Las enumeraciones de miembros pueden utilizarse desde cualquier lugar dentro de su clase, estructura, módulo o interfaz. El código fuera de una clase, estructura o módulo debe calificar el nombre de una enumeración de miembros con el nombre de esa clase, estructura o módulo. Puede evitar la necesidad de utilizar nombres completos mediante la adición de un Imports instrucción para el archivo de origen.

Una enumeración declarada en el nivel de espacio de nombres, fuera de cualquier clase, estructura, módulo o interfaz, es un miembro del espacio de nombres en el que aparece.

El contexto de declaración para una enumeración debe ser un archivo de código fuente, espacio de nombres, clase, estructura, módulo o interfaz y no puede ser un procedimiento. Para obtener más información, vea Contextos de declaración y niveles de acceso predeterminados (Visual Basic).

Puede aplicar los atributos a una enumeración en conjunto, pero no a sus miembros individualmente. Un atributo proporciona información a los metadatos del ensamblado.

Tipo de datos

La instrucción Enum puede declarar el tipo de datos de una enumeración. Cada miembro toma el tipo de datos de la enumeración. Puede especificar Byte, Integer, Long, SByte, Short, UInteger, ULong o UShort.

Si no especifica datatype para la enumeración, cada miembro toma el tipo de datos de initializer. Si se especifica datatype e initializer, el tipo de datos de initializer debe ser convertible a datatype. Si ni datatype ni initializer están presentes, el tipo de datos utiliza Integer de manera predeterminada.

Inicialización de miembros

La instrucción Enum puede inicializar el contenido de los miembros seleccionados en memberlist. Utilice initializer para proporcionar una expresión que se va a asignar al miembro.

Si no especifica un initializer para un miembro, Visual Basic lo inicializa a cero (si es el primer member de una memberlist) o a un valor superior en uno al del member inmediatamente anterior.

La expresión proporcionada en initializer puede ser cualquier combinación de literal, otras constantes ya definidas, y miembros de la enumeración ya definidos, incluso un miembro anterior de esta enumeración. Puede utilizar operadores aritméticos y lógicos para combinar estos elementos.

No puede utilizar variables ni funciones en initializer. No obstante, pueden utilizarse palabras clave de conversión como CByte y CShort. También puede utilizar AscW si lo llama con un argumento constante String o Char, puesto que puede evaluarse en tiempo de compilación.

Las enumeraciones no pueden tener valores de punto flotante. Si un miembro se le asigna un valor de punto flotante y Option Strict se establece en on, se produce un error del compilador. Si Option Strict está desactivado, el valor se convierte automáticamente en el Enum tipo.

Si el valor de un miembro supera el intervalo permitido para el tipo de datos subyacente o si se inicializa un miembro al valor máximo permitido por dicho tipo, el compilador notifica un error.

Modificadores

Las enumeraciones de clases, estructuras, módulos y miembros de interfaz tienen como valor predeterminado el acceso público. Puede ajustar sus niveles de acceso con los modificadores de acceso. Las enumeraciones de miembros de espacio de nombres tienen como valor predeterminado el acceso de amigo. Puede ajustar sus niveles de acceso a público, pero no a privado o protegido. Para obtener más información, vea Niveles de acceso en Visual Basic.

Todos los miembros de la enumeración tienen acceso público y no pueden utilizar ningún modificador de acceso. Sin embargo, si la propia enumeración tiene un nivel de acceso más restringido, tiene prioridad el nivel de acceso a la enumeración especificado.

De forma predeterminada, todas las enumeraciones son tipos y sus campos, constantes. Por consiguiente no se pueden utilizar las palabras clave Shared, Static y ReadOnly al declarar una enumeración o sus miembros.

Asignar varios valores

Las enumeraciones suelen representan valores mutuamente excluyentes. Incluyendo el FlagsAttribute el atributo en el Enum declaración, en su lugar puede asignar varios valores a una instancia de la enumeración. El FlagsAttribute atributo especifica que la enumeración se tratan como un campo de bits, es decir, un conjunto de indicadores. Se denominan bit a bit enumeraciones.

Cuando se declara una enumeración mediante el uso de la FlagsAttribute atributo, se recomienda que utilice potencias de 2, que es 1, 2, 4, 8, 16 y así sucesivamente, los valores. También recomendamos que ser "Ninguno" el nombre de un miembro cuyo valor es 0. Para obtener instrucciones adicionales, consulte FlagsAttribute y Enum.

Ejemplo

En el ejemplo siguiente se muestra cómo utilizar el Enum instrucción. Tenga en cuenta que el miembro se conoce como EggSizeEnum.Mediumy no 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

El método en el siguiente ejemplo está fuera de la Egg clase. Por lo tanto, EggSizeEnum es un nombre completo 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

El ejemplo siguiente utiliza la instrucción Enum para definir un conjunto relacionado de valores constantes con nombre. En este caso, los valores son colores que se pueden elegir a fin de diseñar formularios de entrada de datos para una base de datos.

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

El ejemplo siguiente muestra valores que incluyen números positivos y negativos.

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

En el ejemplo siguiente, un As cláusula se utiliza para especificar el datatype de una enumeración.

Public Enum MyEnum As Byte
  Zero
  One
  Two
End Enum

En el ejemplo siguiente se muestra cómo utilizar una enumeración bit a bit. Varios valores se pueden asignar a una instancia de una enumeración de bit a bit. El Enum declaración incluye el FlagsAttribute atributo, lo que indica que la enumeración se puede tratar como un conjunto de indicadores.

' 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

En el ejemplo siguiente se recorre en iteración una enumeración. Utiliza el GetNames método para recuperar una matriz de nombres de los miembros de la enumeración, y GetValues para recuperar una matriz de valores de miembro.

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

Vea también

Referencia

Enum

Instrucción Const (Visual Basic)

Instrucción Dim (Visual Basic)

Funciones de conversión de tipos (Visual Basic)

AscW

Conceptos

Conversiones implícita y explícita (Visual Basic)

Constantes y enumeraciones (Visual Basic)