Instrucción Enum (Visual Basic)
Declara una enumeración y define los valores de sus miembros.
Sintaxis
[ <attributelist> ] [ accessmodifier ] [ Shadows ]
Enum enumerationname [ As datatype ]
memberlist
End Enum
Partes
attributelistOpcional. Lista de atributos que se aplican a esta enumeración. Debe incluir la lista de atributos entre corchetes angulares (" " y
<">").El 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 FlagsAttribute valor de enumeración.
accessmodifierOpcional. Especifica qué código puede tener acceso a esta enumeración. Puede ser uno de los siguientes:
ShadowsOpcional. Especifica que esta enumeración declara y oculta un elemento de programación con el mismo nombre, o conjunto de elementos sobrecargados, en una clase base. Solo puede especificar Sombras en la propia enumeración, no en ninguno de sus miembros.
enumerationnameNecesario. Nombre de la enumeración. Para obtener información sobre los nombres válidos, vea Nombres de elementos declarados.
datatypeOpcional. Tipo de datos de la enumeración y todos sus miembros.
memberlistNecesario. Lista de constantes de miembro que se declaran en esta instrucción. Aparecen varios miembros en líneas de código fuente individuales.
Cada
memberuna tiene la siguiente sintaxis y partes:[<attribute list>] member name [ = initializer ]Parte Descripción membernameNecesario. Nombre de este miembro. initializerOpcional. Expresión que se evalúa en tiempo de compilación y se asigna a este miembro. EndEnumFinaliza el bloque
Enum.
Comentarios
Si tiene un conjunto de valores invariables que están relacionados lógicamente entre sí, puede definirlos juntos en una enumeración. Esto proporciona nombres significativos para la enumeración y sus miembros, que son más fáciles de recordar que sus valores. A continuación, puede usar los miembros de enumeración en muchos lugares del código.
Entre las ventajas de usar enumeraciones se incluyen las siguientes:
Reduce los errores causados por números con errores o errores.
Facilita el cambio de valores en el futuro.
Facilita la lectura del código, lo que significa que es menos probable que se introduzcan errores.
Garantiza la compatibilidad con versiones posteriores. Si usa enumeraciones, es menos probable que el código presente un error si en el futuro 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 el nivel de clase, estructura, módulo o interfaz, fuera de cualquier procedimiento, es una enumeración de miembros. Es un miembro de la clase, estructura, módulo o interfaz que la declara.
Se puede acceder a las enumeraciones de miembros 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 usar nombres completos agregando una instrucción Imports al archivo de código fuente.
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 de una enumeración debe ser un archivo de origen, un espacio de nombres, una clase, una estructura, un módulo o una interfaz, y no puede ser un procedimiento. Para obtener más información, vea Declaration Contexts and Default Access Levels (Contextos de declaración y niveles de acceso predeterminados).
Puede aplicar atributos a una enumeración en su conjunto, pero no a sus miembros individualmente. Un atributo aporta información a los metadatos del ensamblado.
Tipo de datos
La Enum instrucción puede declarar el tipo de datos de una enumeración. Cada miembro toma el tipo de datos de la enumeración. Puede especificar Byte , , , , , , o Integer Long SByte Short UInteger ULong UShort .
Si no especifica para datatype la enumeración , cada miembro toma el tipo de datos de su initializer . Si especifica y datatype , el tipo de datos de debe poder convertirse en initializer initializer datatype . Si ni datatype ni initializer están presentes, el tipo de datos tiene como valor predeterminado Integer .
Inicialización de miembros
La Enum instrucción puede inicializar el contenido de los miembros seleccionados en memberlist . Se usa initializer para proporcionar una expresión que se va a asignar al miembro.
Si no especifica para un miembro, Visual Basic inicializa en cero (si es el primero en ) o en un valor mayor en uno que el del inmediatamente initializer member memberlist member anterior.
La expresión proporcionada en cada puede ser cualquier combinación de literales, otras constantes que ya están definidas y miembros de enumeración que ya están definidos, incluido un miembro anterior de esta initializer enumeración. Puede usar operadores aritméticos y lógicos para combinar estos elementos.
No se pueden usar variables o funciones en initializer . Sin embargo, puede usar palabras clave de conversión como CByte y CShort . También puede usar si lo llama con una constante o un argumento, ya que se AscW puede evaluar en tiempo de String Char compilación.
Las enumeraciones no pueden tener valores de punto flotante. Si a un miembro se le asigna un valor de punto flotante Option Strict y se establece en on, se produce un error del compilador. Si Option Strict está desactivado, el valor se convierte automáticamente al Enum tipo .
Si el valor de un miembro supera el intervalo permitido para el tipo de datos subyacente, o si inicializa algún miembro en el valor máximo permitido por el tipo de datos subyacente, el compilador notifica un error.
Modificadores
Las enumeraciones de miembros de clase, estructura, módulo e interfaz tienen como valor predeterminado el acceso público. Los niveles de acceso se pueden ajustar con los modificadores de acceso. Las enumeraciones de miembros de espacio de nombres tienen como valor predeterminado el acceso de confianza. 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 enumeración tienen acceso público y no se puede usar ningún modificador de acceso en ellos. Sin embargo, si la propia enumeración tiene un nivel de acceso más restringido, el nivel de acceso de enumeración especificado tiene prioridad.
De forma predeterminada, todas las enumeraciones son tipos y sus campos son constantes. Por lo tanto, las palabras clave , y no se pueden usar Shared Static al declarar una ReadOnly enumeración o sus miembros.
Asignación de varios valores
Las enumeraciones suelen representar valores mutuamente excluyentes. Al incluir el atributo en la declaración, puede asignar varios valores a FlagsAttribute una instancia de la Enum enumeración . El FlagsAttribute atributo especifica que la enumeración se trate como un campo de bits, es decir, un conjunto de marcas. Se denominan enumeraciones bit a bit.
Al declarar una enumeración mediante el atributo , se recomienda usar potencias de FlagsAttribute 2, es decir, 1, 2, 4, 8, 16, y así sucesivamente, para los valores. También se recomienda que "None" sea el nombre de un miembro cuyo valor es 0. Para obtener instrucciones adicionales, vea FlagsAttribute y Enum .
Ejemplo 1
En el ejemplo siguiente se muestra cómo usar la instrucción Enum. Tenga en cuenta que el miembro se conoce como EggSizeEnum.Medium y 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
Ejemplo 2
El método del ejemplo siguiente está fuera de la Egg clase . Por lo EggSizeEnum tanto, está 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
Ejemplo 3
En el ejemplo siguiente se usa Enum la instrucción para definir un conjunto relacionado de valores constantes con nombre. En este caso, los valores son colores que puede elegir para 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
Ejemplo 4
En el ejemplo siguiente se muestran valores que incluyen números positivos y negativos.
Enum SecurityLevel
IllegalEntry = -1
MinimumSecurity = 0
MaximumSecurity = 1
End Enum
Ejemplo 5
En el ejemplo siguiente, se As usa una cláusula para especificar el de una datatype enumeración .
Public Enum MyEnum As Byte
Zero
One
Two
End Enum
Ejemplo 6
En el ejemplo siguiente se muestra cómo usar una enumeración bit a bit. Se pueden asignar varios valores a una instancia de una enumeración bit a bit. La Enum declaración incluye el atributo , que indica que la FlagsAttribute enumeración se puede tratar como un conjunto de marcas.
' 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
Ejemplo 7
En el ejemplo siguiente se recorre en iteración una enumeración . Usa el método para recuperar una matriz de nombres de miembro de la enumeración GetNames y para recuperar una GetValues 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