.net - visual - vb6 enum




Combinando Enums (4)

¿Hay alguna forma de combinar Enums en VB.net?


Creo que lo que quieres es una enumeración tipo bandera.

Debe agregar el atributo Flags a la parte superior de la enumeración, y luego puede combinar las enumeraciones con la palabra clave 'O'.

Me gusta esto:

<Flags()> _
Enum CombinationEnums As Integer
  HasButton = 1
  TitleBar = 2
  ReadOnly = 4
  ETC = 8
End Enum

Nota: Los números a la derecha son siempre dos veces más grandes (potencias de 2): esto es necesario para poder separar los indicadores individuales que se han establecido.

Combine los indicadores deseados con la palabra clave O:

Dim settings As CombinationEnums
settings = CombinationEnums.TitleBar Or CombinationEnums.Readonly

Esto establece TitleBar y Readonly en la enumeración

Para verificar lo que se ha establecido:

If (settings And CombinationEnums.TitleBar) = CombinationEnums.TitleBar Then
  Window.TitleBar = True
End If

La clave para la combinación de Enum es asegurarse de que el valor sea una potencia de dos (1, 2, 4, 8, etc.) para que pueda realizar operaciones de bits sobre ellos ( |= &= ). Esos Enum s se pueden etiquetar con un atributo Flags . La propiedad Anchor en los controles de Windows Forms es un ejemplo de dicho control. Si está marcado como indicador, Visual Studio le permitirá verificar los valores en lugar de seleccionar uno solo en un menú desplegable en el diseñador de propiedades.


Si entiendo tu pregunta correctamente, quieres combinar diferentes tipos de enumeración. Entonces, ¿una variable puede almacenar un valor de uno de los dos enum's right? Si está preguntando sobre el almacenamiento combinando dos valores diferentes de un tipo de enumeración, puede consultar la explicación de Dave Arkell

Los mensajes son solo enteros con algo de azúcar sintáctico. Entonces, si se asegura de que no haya superposición, puede combinarlos mediante conversión a int.

Sin embargo, no será un código bonito. Intento evitar el uso de enumeraciones la mayor parte del tiempo. Por lo general, si permite que las enumeraciones se reproduzcan en su código, es solo cuestión de tiempo antes de que den a luz declaraciones de casos repetidos y otros antipatrones sucios.


Si toma sobre usar enum flags () hay un buen artículo here .





enums