Dicas .NET - Utilizando Enums como flags

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (0)  (0)

Veja nessa dica, como trabalhar com tipos enumerados (Enum), como flags.

Utilizando Enums como flags

 

Veja nesta dica como fazer suas variáveis trabalharem como flags. Os enums sempre foram muito úteis para auxiliar a escrita do código e criação de componentes. Agora em .NET podemos utilizar variáveis Enum na forma de flags.

Variáveis utilizadas na forma de flags permitem a inserção de vários valores combinados que irão funcionar como um flag ligado/desligado. Por exemplo, as opções de configuração de um msgbox nesta instrução são flags, que podem ser somados para definir a configuração final.

O .NET possui um atributo chamado flags que transforma um Enum em um conjunto de flags. Veja como funciona :

 

<Flags()> Public Enum teste

x = 1

y = 2

z = 4

w = 8

End Enum

 

Observe que os valores na criação deste Enum não são seqüenciais. Cada valor é igual a soma dos anteriores + 1. Esse Enum poderá conter inúmeras combinações. Vamos então testar todas as combinações possíveis. Observe que todas as combinações possíveis só serão obtidas se a regra acima (numeração dos elementos) tiver sido obedecida.

 

Dim i As Integer

Dim t As teste

For i = 1 To 15

  t = i

  MsgBox(t.ToString)

Next

 

O laço vai do valor do primeiro elemento até o valor do último elemento * 2 - 1. A atribuição de valores no enum pode ser uma soma simples. Veja como fica:

 

Dim t As teste

t = teste.w Or teste.x Or teste.y

t = teste.w + teste.x + teste.y

MsgBox(t.ToString)

 

Observe que fiz a mesma atribuição de duas formas diferentes, apenas por demonstração. Existe apenas uma diferença entre as duas formas: Quando digitamos OR o menu do intelissence é aberto, quando digitamos + isso não ocorre. Um detalhe interessante é que isso ocorre em qualquer flag, inclusive os do msgBox.

Por fim vamos ver como testar se um determinado valor da variável contém um determinado elemento único do Enum. Vamos colocar uma TextBox em um formulário e utilizar o seguinte código:

 

Dim t As teste

t = TextBox1.Text

If t And 2 Then

  MsgBox("O valor contém y")

Else

  MsgBox("O valor não contém y")

End If

 

Observe que quando utilizando AND ou OR, como nos dois exemplos, estamos utilizando operações bit a bit (bitwise operations).

 

 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?