Carregando...

Enums

Em C#, Enums (ou enumerações) são tipos de dados especiais que permitem definir um conjunto de valores constantes nomeados. Eles são fundamentais para tornar o código mais legível, seguro e fácil de manter, eliminando a necessidade de valores “mágicos” como números ou strings espalhados pelo código. Enums são frequentemente utilizados para representar estados, categorias, níveis de permissão ou qualquer conjunto fixo de opções, como dias da semana, status de pedidos ou níveis de acesso de usuários.
Enums são definidos usando a palavra-chave enum, e por padrão cada valor recebe um inteiro sequencial, começando em zero, mas é possível especificar valores explícitos ou até mesmo alterar o tipo subjacente para byte, short, long, etc., para otimização de memória. Eles se integram naturalmente com princípios de programação orientada a objetos (OOP) e podem ser utilizados em classes, estruturas, métodos e condições de controle, permitindo lógica de negócios mais robusta e organizada.
Neste tutorial, você aprenderá como definir, inicializar e utilizar enums, além de converter entre enums e valores inteiros, aplicar em estruturas condicionais e loops, e usá-los em aplicações reais. Ao final, você será capaz de aplicar enums em projetos complexos, garantindo código seguro, eficiente e alinhado com boas práticas de desenvolvimento em C# e arquitetura de software.

Exemplo Básico

text
TEXT Code
using System;

namespace EnumExample
{
class Program
{
enum WeekDays
{
Sunday,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday
}

static void Main(string[] args)
{
WeekDays today = WeekDays.Wednesday;

Console.WriteLine("Hoje é: " + today);

if (today == WeekDays.Wednesday)
{
Console.WriteLine("Estamos no meio da semana!");
}

int dayNumber = (int)today;
Console.WriteLine("Número do dia na semana: " + dayNumber);

WeekDays anotherDay = (WeekDays)5;
Console.WriteLine("Dia número 5: " + anotherDay);
}
}

}

Neste exemplo, definimos um enum WeekDays com sete valores constantes. No método Main, mostramos como inicializar uma variável do tipo enum, usar enums em condições if e realizar conversões seguras entre enum e int.
A conversão de enum para int é útil para cálculos, armazenamento de dados ou comunicação com bancos de dados, enquanto a conversão de int para enum permite reconstruir o estado a partir de dados numéricos. Esse padrão melhora a legibilidade e a manutenção do código, além de se integrar de forma natural à programação orientada a objetos em projetos reais.

Exemplo Prático

text
TEXT Code
using System;

namespace AdvancedEnumExample
{
enum OrderStatus : byte
{
Pending = 1,
Processing = 2,
Shipped = 3,
Delivered = 4,
Cancelled = 5
}

class Order
{
public int Id { get; set; }
public string Customer { get; set; }
public OrderStatus Status { get; set; }

public void DisplayStatus()
{
switch (Status)
{
case OrderStatus.Pending:
Console.WriteLine("Pedido pendente.");
break;
case OrderStatus.Processing:
Console.WriteLine("Pedido em processamento.");
break;
case OrderStatus.Shipped:
Console.WriteLine("Pedido enviado.");
break;
case OrderStatus.Delivered:
Console.WriteLine("Pedido entregue.");
break;
case OrderStatus.Cancelled:
Console.WriteLine("Pedido cancelado.");
break;
default:
Console.WriteLine("Status desconhecido.");
break;
}
}
}

class Program
{
static void Main(string[] args)
{
Order o1 = new Order { Id = 101, Customer = "Alice", Status = OrderStatus.Processing };
Order o2 = new Order { Id = 102, Customer = "Bob", Status = OrderStatus.Shipped };

o1.DisplayStatus();
o2.DisplayStatus();
}
}

}

Este exemplo avançado demonstra o uso de enums em cenários reais. O enum OrderStatus utiliza byte como tipo subjacente para otimização de memória. A classe Order possui propriedades Id, Customer e Status, sendo que DisplayStatus usa switch para executar lógica de negócios baseada no enum.
Esse padrão aumenta a legibilidade, facilita manutenção e garante consistência. A utilização de enums dentro de classes fortalece o design orientado a objetos e permite controlar estados complexos de maneira eficiente. Boas práticas incluem especificar tipo subjacente adequado, usar default no switch e validar conversões entre valores.

Boas práticas incluem nomes claros para enums e membros, escolha apropriada do tipo subjacente para otimização de memória e validação segura ao converter valores.
Erros comuns incluem uso de números ou strings “mágicos”, switch incompleto e ausência de default. Para desempenho, escolha tipos pequenos e evite conversões desnecessárias. Para depuração, utilize Visual Studio Immediate Window e Enum.TryParse para conversões seguras. Enums aceitam apenas valores válidos, garantindo segurança e consistência de comportamento.

📊 Tabela de Referência

C# Element/Concept Description Usage Example
enum Define um conjunto de valores constantes nomeados enum WeekDays {Sunday, Monday, Tuesday}
Casting Conversão entre enum e tipo numérico int dayNumber = (int)WeekDays.Monday; WeekDays day = (WeekDays)1
Underlying Type Seleciona tipo subjacente para otimização enum Status : byte {Active = 1, Inactive = 0}
Switch Statement Aplica lógica baseada no valor do enum switch(status){ case Status.Active: ... break;}
Class Integration Uso de enums como propriedade de classe class Order { public OrderStatus Status {get; set;} }

O uso de enums em C# permite criar código estruturado e seguro, melhorando legibilidade, manutenção e performance. Em projetos comerciais, são essenciais para gerenciar estados, categorias e lógica de negócios.
Próximos passos incluem estudar Attributes, aplicar Generics para abstração de tipos e praticar State Pattern. Recomenda-se utilizar enums consistentemente, conversões seguras e seguir boas práticas de design. Documentação oficial, livros avançados de C# e projetos práticos são recursos importantes para dominar enums de forma eficaz.

🧠 Teste Seu Conhecimento

Pronto para Começar

Teste seu Conhecimento

Teste sua compreensão deste tópico com questões práticas.

4
Perguntas
🎯
70%
Para Passar
♾️
Tempo
🔄
Tentativas

📝 Instruções

  • Leia cada pergunta cuidadosamente
  • Selecione a melhor resposta para cada pergunta
  • Você pode refazer o quiz quantas vezes quiser
  • Seu progresso será mostrado no topo