Eu estava lendo algumas enums e as achei muito semelhantes a declarar constantes. Como saberia quando usar uma constante em vez de um enum ou vice-versa. Quais são algumas das vantagens de usar enums?
Eu estava lendo algumas enums e as achei muito semelhantes a declarar constantes. Como saberia quando usar uma constante em vez de um enum ou vice-versa. Quais são algumas das vantagens de usar enums?
Respostas:
Use enums quando quiser definir um intervalo de valores que algo pode ser. A cor é um exemplo óbvio como:
public enum Colour
{
White,
Red,
Blue
}
Ou talvez um conjunto de coisas possíveis como: (Exemplo, roubei daqui porque sou preguiçoso)
[FlagsAttribute]
enum DistributedChannel
{
None = 0,
Transacted = 1,
Queued = 2,
Encrypted = 4,
Persisted = 16,
FaultTolerant = Transacted | Queued | Persisted
}
As constantes devem ser para um único valor, como PI. Não há uma faixa de valores de PI, há apenas PI.
Outros pontos a considerar são:
Type Safety"
O que está faltando nas outras respostas é que enums têm um tipo de base inteira. Você pode alterar o padrão de int para qualquer outro tipo integral, exceto char como:
enum LongEnum : long {
foo,
bar,
}
Você pode converter explicitamente e implicitamente no tipo base, o que é útil em instruções switch. Esteja ciente de que é possível converter qualquer valor do tipo base em um enum, mesmo se o enum não tiver nenhum membro com o valor apropriado. Portanto, usar sempre a seção padrão em um switch é uma boa ideia. BTW, o próprio .NET permite enums com valor de ponto flutuante, mas você não pode defini-los em C #, embora eu ache que você ainda pode usá-los (exceto em switch).
Além disso, o uso de enums oferece mais segurança de digitação. Se você pretende usar, por exemplo, constantes int como parâmetros de método, eu poderia chamar o método com qualquer valor int. Concedido, por meio do casting isso pode acontecer com enums também, mas não acontecerá acidentalmente. Pior é a possibilidade de confundir a ordem dos parâmetros.
void method(int a, int b) {...}
Se apenas a constante A pode ir para a e a constante B apenas pode ir para b, o uso de dois tipos diferentes de enum revelará qualquer uso incorreto durante a compilação.
Uma constante é um recurso de linguagem que diz que a variável não mudará de valor (então o compilador pode fazer otimizações em torno desse conhecimento) onde um enum é um tipo específico.
Constantes podem ser qualquer tipo de dados, mas enum é um enum.
Eu uso um enum em qualquer lugar onde você possa ter várias opções e quiser melhorar a legibilidade do código. ou seja, você pode ter níveis de rastreamento como um int com valores 0, 1, 2 ou como um enum como erro, aviso e informações.
Os Enum também podem ser usados como operadores bit a bit, ou seja, FontStyle.Bold | FontStyle.Italic forneceria fontes em negrito e itálico.
Além da resposta de Robert:
Use enum para um conjunto finito de valores nomeados. Você realmente não se importa com o valor numérico por trás de cada símbolo (mas ainda tem a capacidade de impô-los, por exemplo, para compatibilidade com um sistema legado).
Robert: Sim, Enum's podem ser usados como campos de bits. Use o atributo Flags (e certifique-se de que os membros da enum tenham valores numéricos adequados).
A constante AC # é semelhante a uma variável, pois dá um nome definido a um valor. No entanto, uma constante difere de uma variável padrão porque, uma vez definida, o valor atribuído à constante nunca pode ser alterado. O principal benefício das constantes é sua ajuda na criação de código autodocumentável, bem como permitir a declaração de valores-chave em um único lugar, o que permite fácil manutenção caso o valor precise ser atualizado e o software recompilado.
Enquanto as listas de Enumeradores são úteis para definir sequências e estados, particularmente quando há uma progressão natural através desses estados. Isso ocorre porque cada constante na lista pode ser formatada e comparada usando seu nome ou valor. Um enum também pode ser usado para definir um conjunto limitado de valores válidos.
Uma coisa que acho útil quando uso em enum
vez de const
é que você pode iterar por meio dos valores em um enum
, é muito mais difícil fazer isso com const
valores.