INTRODUÇÃO

Enums (enumerations ou enumerações, em português) são constantes fortemente tipadas. Elas são estáticas, ou seja, não é possível nem preciso acessar os seus valores instanciando um objeto utilizando a palavra reservada new. O acesso é feito a partir do nome da classe em que está contido e em seguida o nome do enum a ser utilizado.

Uma enumeração de dados é útil quando precisamos criar estruturas que serão pouco alteradas ao longo do desenvolvimento do projeto. No entanto se for necessário realizar alguma alteração, é interessante deixar ciente a sua equipe que haverá mudanças, senão algumas divergências podem acontecer.

Imagine o seguinte cenário, em algum momento durante o desenvolvimento do projeto, foi visto a necessidade de se criar um enum com todos os departamentos da empresa. Após a criação, todo o código da aplicação foi moldado utilizando o enum Departamentos, então se por acaso o empreendimento crescer e for preciso criar mais departamentos, basta ir no Enum e acrescentar mais outro item, do mesmo caso se for preciso excluir um departamento que não tem mais nescessidade, ou que se fundiu a outro e virou só um.

Muitos desenvolvedores, principalmente os iniciantes confundem um enum com uma classe, realmente são bem parecidos mas não são iguais. Uma diferença básica é que uma classe para ser acessada ela precisa que um objeto crie uma instância dela (é claro se a classe não for estática) e o enum não.

Trabalhar com Enums provê clareza e facilidade de manutenção no código, pois através deles podemos definir e limitar os valores de um determinado conjunto de dados e também manipularmos da forma como desejamos. Por exemplo, supomos que precisamos guardar valores sobre filmes com os seus devidos gêneros. Existem várias formas de se manter esses valores, porém a mais simples e prática é utilizado o Enum.

OBSERVAÇÃO: Quando precisar criar Enums em uma aplicação, procure sempre utilizar nomes amigáveis e de fácil compreensão. Afinal de contas ninguém é obrigado a saber como a nossa mente funciona, então é uma boa prática acordar os termos utilizandos com a sua equipe, do contrário o seu programa ficará complexo e de díficil manutenção.

CRIANDO O PROJETO

Vamos criar uma Console Application utilizando a linguagem C#. Para isso siga os seguintes passos:

  • Clique em File e depois em New Project;
  • Escolha o nome que você deseja para o seu projeto, no artigo utilizaremos apenas o nome Enums;
  • Para Finalizar clique em OK;
  • Pronto o nosso projeto já está pronto para utilizar os nossos exemplos.
Criando o projeto

Figura 1: Criando o projeto

DECLARANDO ENUMS

Antes de começarmos a praticar coms Enums, é essencial que saibamos como declará-los, afinal de contas uma ação depende da outra. Vamos criar uma classe chamada TestandoEnum e um enum contendo os alguns tipos de gênero e definir alguns valores.

Listagem 1: Simples declarção de um enum


enum Generos
{
    Aventura,
    Romance,
    Suspense,
    Terror
};

Analisando o código acima, criamos um enum de nome Generos com um modificador de acesso padrão e quatro valores associados. Este código está correto e compila normalmente, porém não poderemos utilizar esses valores em outras classes do nosso projeto, pois a sua visibilidade é restrita.

Listagem 2: Acessando o Enum a partir da mesma classe


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Enum
{
    public class TestandoEnum
    {
        enum Generos
        {
            Aventura,
            Romance,
            Suspense,
            Terror
        };

        Generos valor = Generos.Aventura;
    }
}

Observe que o nosso programa, não acusou nenhum erro por causa de visibilidade por estar na mesma classe então este código compilará normalmente.

OBSERVAÇÃO: O ponto e virgula, é opcional quando se declara enums.

OBSERVAÇÃO: Como o nosso Enum está na mesma classe em que queremos acessá-lo, podemos fazer isso a partir do nome do enum. Caso estivesse em uma outra classe acessariamos dessa forma: TestandoEnum.Generos.Aventura.

Listagem 3: Erro de compilação por falta de visibilidade


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Enum
{   
     class Program
    {       
        static void Main(string[] args)
        {
            TestandoEnum.Generos valor;
                     
            valor= TestandoEnum.Generos.Aventura;

            Console.WriteLine(valor);
            Console.ReadKey();
        }
    }
}

O código acima declara uma variável para receber o nosso enum com o nome valor, logo depois essa varíável é setada com o valor de Aventura, por fim o código exibe o valor do resultado. A sintaxe está totalmente correta, no entanto o compilador acusará as erro nas duas primeiras linhas da função Main, com a seguinte mensagem:

Mensagem de erro de proteção

Figura 2: Mensagem de erro de proteção

A melhor forma de se consertar essa situação é adicionarmos a palavra reservada public antes da palavra enum.

Public é um modificador de acesso que permite a visibilidade para todas as classes do nosso projeto, então se tivermos a necessidade de que todas as nossas classes utilizem o enum, o public tem que ser definido. Vamos ver como o nósso código se comportará após a modificação.

Visibilidade total em nossa aplicação

Figura 3: Visibilidade total em nossa aplicação

Nossa aplicação possui total visibilidade, todas as nossas classes do projeto poderão acessar o enum Generos sem problemas. O enum pode conter qualquer modificador de acesso como: protected, private, e public.

Listagem 3: Enums não são declarados dentro de métodos


public void TestandoAcesso(){        
        public   enum Generos
        {
            Aventura,
            Romance,
            Suspense,
            Terror
        };
}

Enums não podem ser declarados dentro de métodos, o compilador acusará um erro quando este código for escrito. Os enums podem ser de declarados dentro de uma classe ou fora da mesma, abaixo do namespace ou então acima do mesmo. Mas nunca dentro de métodos.

CONCLUSÃO

Neste artigo, aprendemos como declarar de forma correta os enums na linguagem C# e como acessá-los a partir de outras classes do nosso projeto.

Espero que as informações aqui apresentadas possam ser úteis. Até a próxima!