VB .NET - Usando Enumeration


O que é Enumeration ? (Enumerar)

Seria algo como nomear ou numerar um a um (geralmente em uma lista).

Levando o conceito para o  mundo dos bits podemos dizer que Enumeration é um tipo que pode tratar um conjunto de valores definidos .

Por exemplo o estado civil de uma pessoa; existem valores definidos na lei para ele , temos que uma pessoa pode ser : casada , solteira , viúva , divorciada , desquitada.

Para tratarmos conjunto de valores definidos como o exemplo do estado civil acima podemos usar Enumeration.

O VB .NET fornece um número de constantes intrínsecas e o recurso da Enumeration para facilitar a sua vida de programador. 

Uma Enumeration oferece uma maneira fácil de trabalhar com conjunto de dados que estão relacionados a constantes. Assim , um Enumeration ou Enum é um nome simbólico para um conjunto de valores.

Definir uma Enumeration no VB .NET é muito simples; é como definir uma estrutura.

Para declarar um Enumeration faça assim :

- Use a palavra chave Enum na seção de declaração de uma classe ou módulo;
- Especifique os nomes para representar os valores permitidos;
- Defina o nível apropriado de acesso usando : Private, Protected, Friend, or Public.

Nota: Você não pode declarar uma Enumeration dentro de um método.

A sintaxe usada para Enumeration é :

[ <attribute list> ] [ access modifier ]  [ Shadows ] Enum enumeration name [ As data type ] member list End Enum

   Public ( Private ) Enum Nome_da_Enumeração
	Enumeração_1
	Enumeração_1
	Enumeração_1
	Enumeração_1
	...
	Enumeração_1
   End Enum

Sintaxe da Enumeração

Vamos dar um exemplo: A seguir temos uma enumeração - Enumeration - a qual foi dado o nome de DiaSemana.

  Public Enum DiaSemana
    Domingo
    Segunda
    Terça
    Quarta
    Quinta
    Sexta
    Sabado
 End Enum

Exemplo

Declarar um objeto para a Enumeration pode ser feito da seguinte forma :

Dim diaDescanso As DiaSemana = DiaSemana.Domingo

No .NET Framework Enumerations são tratadas como um tipo especial de dados. Na verdade Enumeration mapeia para dados do tipo integer .

As Enumerations são muito flexíveis, pois podemos especificar um tipo de dado integer para a enumeration (byte, Short , Integer ou Long).

O uso de Enumeration  torna o programa mais legível ,além de ser fortemente tipada e assim evitar erros no programa.
A vejamos a seguir algumas operações envolvendo o conceito de Enumeration no Visual Basic .NET.
Eu estou usando o VB 2008 Express Edition para criar os exemplos deste artigo.
Crie um novo projeto no VB 2008 Express do tipo Windows Forms Application com o nome VB_Enumeration;
1- Declarando Enumeradores

Os enumeradores criados sem um tipo definido de dado, são interpretados como sendo do tipo inteiro (int / Integer).

Os enumeradores podem suportar os tipos (byte / Byte, sbyte / SByte, short / Short, ushort / UShort, int / Integer, uint / UInteger, long Long, ulong / ULong).

Exemplo de de declaração:
    Public Enum BancoDados As Byte
        Access = 1
        SqlServer = 2
        MySql = 3
    End Enum
2-  Como obter um membro de uma enumeração definida dado o seu valor inteiro ?

O problema é obter o membro de uma enumeração conhecendo o seu valor inteiro. No Exemplo acima desejamos obter o nome Access, SqlServer ou MySql a partir de um dos valores inteiros definidos a eles, ou seja a partir de 1 , 2 ou 3.

Para o exemplo acima informando o valor inteiro 3 desejamos obter o membro MySQL. O código usado para isso é o seguinte:

  Dim valorEnum As BancoDados
  Dim i As Integer

  i = 3
  valorEnum = CType(i, BancoDados)

  'Exibe o membro no ListBox
  lstEnum.Items.Add(valorEnum.ToString())
- declaramos uma variável do tipo da enumeração definida  
- declaramos um variável i do tipo inteiro

- atribuímos o valor 3 para a variável i
-Obtemos o valor do membro


- exibimos o valor no controle ListBox, no caso : MySql
Conclusão: basta usar a função Ctype =>  CType(valor, NomeEnumeração) 
2-  Como obter um membro de uma enumeração definida dado o seu nome ?
Para o exemplo acima fazemos assim:
Dim valorEnum As BancoDados

valorEnum = CType(
System.Enum.Parse(GetType(BancoDados), "SqlServer"), BancoDados)

lstEnum.Items.Add(valorEnum.ToString())

neste exemplo estamos usando o método Parse da classe System.Enum : CType(System.Enum.Parse(GetType(BancoDados), "SqlServer"), BancoDados)

O valor retornado para o exemplo será: SqlServer.

Conclusão: basta usar a função Ctype em conjunto com o método Parse da classe Enum.

3 - Como tratar com uma seleção de um valor feita em uma enumeração ?

Para a enumeração definida acima como podemos tratar a seleção de um valor da enumeração.

 Dim valorEnum As BancoDados
.....
Select Case valorEnum
    Case BancoDados.Access              
       acesso_Access()
    Case BancoDados.SqlServer
       acesso_SQLServer()
    Case BancoDados.MySql
       acesso_MySql()
    Case Else
       Exit Select
End Select
4- Como converter enumeradores para tipos primitivos ?
Basta efetuar um cast (coersão forçada) direto. No VB .NET usamos a função DirectCast.
Dim valorEnum As BancoDados
valorEnum = DirectCast(BancoDados.Access, BancoDados)
5- Como converter enumeradores para string ?
Basta usar o  método GetName da classe Enum:
Dim valorEnum As BancoDados = BancoDados.MySql

Dim nomeDoEnumerador = System.Enum.GetName(GetType(BancoDados), valorEnum)
Eu sei é apenas VB .NET , mas eu gosto...
Referências:

José Carlos Macoratti