Instrucción Enum (Visual Basic)Enum Statement (Visual Basic)

Declara una enumeración y define los valores de sus miembros.Declares an enumeration and defines the values of its members.

SintaxisSyntax

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

ElementosParts

  • attributelist

    Opcional.Optional. Lista de atributos que se aplican a esta enumeración.List of attributes that apply to this enumeration. Debe incluir el lista de atributos en corchetes angulares ("<"y">").You must enclose the attribute list in angle brackets ("<" and ">").

    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.The FlagsAttribute attribute indicates that the value of an instance of the enumeration can include multiple enumeration members, and that each member represents a bit field in the enumeration value.

  • accessmodifier

    Opcional.Optional. Especifica qué código puede tener acceso a esta enumeración.Specifies what code can access this enumeration. Puede ser uno de los siguientes:Can be one of the following:

  • Shadows

    Opcional.Optional. Especifica que esta enumeración vuelve a declarar y oculta un elemento de programación con el mismo nombre o el conjunto de elementos sobrecargados, en una clase base.Specifies that this enumeration redeclares and hides an identically named programming element, or set of overloaded elements, in a base class. Puede especificar sombras solo en la propia enumeración, no en cualquiera de sus miembros.You can specify Shadows only on the enumeration itself, not on any of its members.

  • enumerationname

    Obligatorio.Required. Nombre de la enumeración.Name of the enumeration. Para obtener información sobre los nombres válidos, vea Declared Element Names.For information on valid names, see Declared Element Names.

  • datatype

    Opcional.Optional. Tipo de datos de la enumeración y todos sus miembros.Data type of the enumeration and all its members.

  • memberlist

    Obligatorio.Required. Lista de constantes de miembros que se declaran en esta instrucción.List of member constants being declared in this statement. Varios miembros aparecen en líneas de código fuente individuales.Multiple members appear on individual source code lines.

    Cada member tiene la sintaxis y las partes siguientes: [<attribute list>] member name [ = initializer ]Each member has the following syntax and parts: [<attribute list>] member name [ = initializer ]

    PartePart DescripciónDescription
    membername Obligatorio.Required. Nombre de este miembro.Name of this member.
    initializer Opcional.Optional. Expresión que se evalúa en tiempo de compilación y se asigna a este miembro.Expression that is evaluated at compile time and assigned to this member.
  • End EnumEnd Enum

    Finaliza el bloque Enum.Terminates the Enum block.

ComentariosRemarks

Si tiene un conjunto de valores inmutables que se relacionan lógicamente entre sí, puede definirlos juntos en una enumeración.If you have a set of unchanging values that are logically related to each other, you can define them together in an enumeration. Esto proporciona nombres descriptivos para la enumeración y sus miembros, que son más fáciles de recordar que sus valores.This provides meaningful names for the enumeration and its members, which are easier to remember than their values. A continuación, puede utilizar a los miembros de enumeración en muchos lugares del código.You can then use the enumeration members in many places in your code.

Las ventajas de usar las enumeraciones incluyen lo siguiente:The benefits of using enumerations include the following:

  • Reduce los errores causados por números transpuestos o.Reduces errors caused by transposing or mistyping numbers.

  • Es fácil cambiar los valores en el futuro.Makes it easy to change values in the future.

  • Hace el código más fácil de leer, lo que significa que es menos probable que se van a introducir errores.Makes code easier to read, which means it is less likely that errors will be introduced.

  • Garantiza la compatibilidad con versiones posteriores.Ensures forward compatibility. 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.If you use enumerations, your code is less likely to fail if in the future someone changes the values corresponding to the member names.

Una enumeración tiene un nombre, un tipo de datos subyacente y un conjunto de miembros.An enumeration has a name, an underlying data type, and a set of members. Cada miembro representa una constante.Each member represents a constant.

Una enumeración declarada en el nivel de clase, estructura, módulo o interfaz, fuera de cualquier procedimiento, es un enumeración de miembros.An enumeration declared at class, structure, module, or interface level, outside any procedure, is a member enumeration. Es un miembro de la clase, estructura, módulo o interfaz que la declara.It is a member of the class, structure, module, or interface that declares it.

Las enumeraciones de miembros se pueden acceder desde cualquier lugar dentro de su clase, estructura, módulo o interfaz.Member enumerations can be accessed from anywhere within their class, structure, module, or interface. 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.Code outside a class, structure, or module must qualify a member enumeration's name with the name of that class, structure, or module. Puede evitar la necesidad de utilizar nombres completos mediante la adición de un importaciones instrucción al archivo de origen.You can avoid the need to use fully qualified names by adding an Imports statement to the source file.

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.An enumeration declared at namespace level, outside any class, structure, module, or interface, is a member of the namespace in which it appears.

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.The declaration context for an enumeration must be a source file, namespace, class, structure, module, or interface, and cannot be a procedure. Para obtener más información, vea Declaration Contexts and Default Access Levels (Contextos de declaración y niveles de acceso predeterminados).For more information, see Declaration Contexts and Default Access Levels.

Se puede aplicar los atributos a una enumeración como un todo, pero no a sus miembros individualmente.You can apply attributes to an enumeration as a whole, but not to its members individually. Un atributo proporciona información a los metadatos del ensamblado.An attribute contributes information to the assembly's metadata.

Tipo de datosData Type

El Enum instrucción puede declarar el tipo de datos de una enumeración.The Enum statement can declare the data type of an enumeration. Cada miembro toma el tipo de datos de la enumeración.Each member takes the enumeration's data type. Puede especificar Byte, Integer, Long, SByte, Short, UInteger, ULong, o UShort.You can specify Byte, Integer, Long, SByte, Short, UInteger, ULong, or UShort.

Si no especifica datatype para la enumeración, cada miembro toma el tipo de datos de su initializer.If you do not specify datatype for the enumeration, each member takes the data type of its initializer. Si se especifican ambas datatype y initializer, tipo de datos de initializer debe ser convertible a datatype.If you specify both datatype and initializer, the data type of initializer must be convertible to datatype. Si no datatype ni initializer está presente, el valor predeterminado es de tipo de datos Integer.If neither datatype nor initializer is present, the data type defaults to Integer.

Inicialización de miembrosInitializing Members

El Enum instrucción puede inicializar el contenido de los miembros seleccionados en memberlist.The Enum statement can initialize the contents of selected members in memberlist. Usa initializer para proporcionar una expresión que se asigna al miembro.You use initializer to supply an expression to be assigned to the member.

Si no especifica initializer para un miembro, Visual Basic la inicializa a cero (si es la primera member en memberlist), o en un valor mayor en uno que el de la inmediatamente anterior member.If you do not specify initializer for a member, Visual Basic initializes it either to zero (if it is the first member in memberlist), or to a value greater by one than that of the immediately preceding member.

La expresión proporcionada en cada initializer puede ser cualquier combinación de literales, otras constantes que ya están definidas y miembros de enumeración que ya están definidos, incluso un miembro anterior de esta enumeración.The expression supplied in each initializer can be any combination of literals, other constants that are already defined, and enumeration members that are already defined, including a previous member of this enumeration. Puede utilizar operadores aritméticos y lógicos para combinar estos elementos.You can use arithmetic and logical operators to combine such elements.

No se puede usar las variables o funciones en initializer.You cannot use variables or functions in initializer. Sin embargo, puede usar palabras clave de conversión, como CByte y CShort.However, you can use conversion keywords such as CByte and CShort. También puede usar AscW si se le llama con una constante String o Char argumento, puesto que puede evaluarse en tiempo de compilación.You can also use AscW if you call it with a constant String or Char argument, since that can be evaluated at compile time.

Las enumeraciones no pueden tener valores de punto flotante.Enumerations cannot have floating-point values. Si un miembro se le asigna un valor de punto flotante y Option Strict se establece en on, se produce un error del compilador.If a member is assigned a floating-point value and Option Strict is set to on, a compiler error occurs. Si Option Strict está desactivado, el valor se convierte automáticamente en el Enum tipo.If Option Strict is off, the value is automatically converted to the Enum type.

Si el valor de un miembro supera el intervalo permitido para el tipo de datos subyacente, o si se inicializa a un miembro al valor máximo permitido por el tipo de datos subyacente, el compilador notifica un error.If the value of a member exceeds the allowable range for the underlying data type, or if you initialize any member to the maximum value allowed by the underlying data type, the compiler reports an error.

ModificadoresModifiers

Clase, estructura, módulo y predeterminado de enumeraciones de miembro de interfaz para acceso público.Class, structure, module, and interface member enumerations default to public access. Los niveles de acceso se pueden ajustar con los modificadores de acceso.You can adjust their access levels with the access modifiers. Namespace predeterminado de enumeraciones de miembro para el acceso de confianza.Namespace member enumerations default to friend access. Puede ajustar sus niveles de acceso público, pero no a privado o protegido.You can adjust their access levels to public, but not to private or protected. Para obtener más información, consulte tener acceso a los niveles en Visual Basic.For more information, see Access levels in Visual Basic.

Todos los miembros de enumeración tienen acceso público y no se puede usar cualquier modificador de acceso en ellos.All enumeration members have public access, and you cannot use any access modifiers on them. Sin embargo, si la propia enumeración tiene un nivel de acceso más restrictivos, el nivel de acceso de la enumeración especificada tiene prioridad.However, if the enumeration itself has a more restricted access level, the specified enumeration access level takes precedence.

De forma predeterminada, todas las enumeraciones son tipos y sus campos son constantes.By default, all enumerations are types and their fields are constants. Por lo tanto, el Shared, Static, y ReadOnly palabras clave no se puede usar cuando se declara una enumeración o sus miembros.Therefore the Shared, Static, and ReadOnly keywords cannot be used when declaring an enumeration or its members.

Asignación de varios valoresAssigning Multiple Values

Enumeraciones suelen representan valores mutuamente exclusivos.Enumerations typically represent mutually exclusive values. Al incluir el FlagsAttribute atributo el Enum declaración, en su lugar, puede asignar varios valores a una instancia de la enumeración.By including the FlagsAttribute attribute in the Enum declaration, you can instead assign multiple values to an instance of the enumeration. El FlagsAttribute atributo especifica que la enumeración se tratan como un campo de bits, es decir, un conjunto de marcas.The FlagsAttribute attribute specifies that the enumeration be treated as a bit field, that is, a set of flags. Se denominan bit a bit enumeraciones.These are called bitwise enumerations.

Al declarar una enumeración mediante el uso de la FlagsAttribute atributo, se recomienda que use potencias de 2, que es, 1, 2, 4, 8, 16 y así sucesivamente, para los valores.When you declare an enumeration by using the FlagsAttribute attribute, we recommend that you use powers of 2, that is, 1, 2, 4, 8, 16, and so on, for the values. También se recomienda que "" ser el nombre de un miembro cuyo valor es 0.We also recommend that "None" be the name of a member whose value is 0. Para obtener instrucciones adicionales, consulte FlagsAttribute y Enum.For additional guidelines, see FlagsAttribute and Enum.

EjemploExample

En el ejemplo siguiente se muestra cómo usar la instrucción Enum.The following example shows how to use the Enum statement. Tenga en cuenta que el miembro se conoce como EggSizeEnum.Mediumy no como Medium.Note that the member is referred to as EggSizeEnum.Medium, and not as 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

EjemploExample

El método en el ejemplo siguiente está fuera del Egg clase.The method in the following example is outside the Egg class. Por lo tanto, EggSizeEnum es un nombre completo como Egg.EggSizeEnum.Therefore, EggSizeEnum is fully qualified as 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

EjemploExample

En el ejemplo siguiente se usa el Enum denominado de instrucción para definir un conjunto relacionado de valores constantes.The following example uses the Enum statement to define a related set of named constant values. En este caso, los valores son colores que puede optar por diseñar formularios de entrada de datos para una base de datos.In this case, the values are colors you might choose to design data entry forms for a database.

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

EjemploExample

El ejemplo siguiente muestra los valores que incluyen números positivos y negativos.The following example shows values that include both positive and negative numbers.

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

EjemploExample

En el ejemplo siguiente, un As cláusula se utiliza para especificar el datatype de una enumeración.In the following example, an As clause is used to specify the datatype of an enumeration.

Public Enum MyEnum As Byte
  Zero
  One
  Two
End Enum

EjemploExample

El ejemplo siguiente muestra cómo utilizar una enumeración bit a bit.The following example shows how to use a bitwise enumeration. Varios valores se pueden asignar a una instancia de una enumeración bit a bit.Multiple values can be assigned to an instance of a bitwise enumeration. El Enum declaración incluye el FlagsAttribute atributo, que indica que la enumeración se puede tratar como un conjunto de marcas.The Enum declaration includes the FlagsAttribute attribute, which indicates that the enumeration can be treated as a set of flags.

' 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

EjemploExample

El ejemplo siguiente se recorre en iteración una enumeración.The following example iterates through an enumeration. Usa el GetNames método para recuperar una matriz de nombres de miembro de la enumeración, y GetValues para recuperar una matriz de valores de miembro.It uses the GetNames method to retrieve an array of member names from the enumeration, and GetValues to retrieve an array of member values.

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énSee also