Pregunta Enums y Constants. ¿Qué usar cuando?


Estaba leyendo en enumeraciones y las encuentro muy similares a declarar constantes. ¿Cómo sabría cuándo usar una constante en lugar de una enumeración o viceversa? ¿Cuáles son algunas de las ventajas de usar enums?


74
2018-03-05 07:04


origen


Respuestas:


Use enumeraciones cuando quiera definir un rango de valores que algo puede ser. El color es un ejemplo obvio como:

public enum Colour
{
    White,
    Red,
    Blue
}

O tal vez un conjunto de cosas posibles como: (Ejemplo que robé de aquí como soy perezoso)

[FlagsAttribute]
enum DistributedChannel
{
  None = 0,
  Transacted = 1,
  Queued = 2,
  Encrypted = 4,
  Persisted = 16,
  FaultTolerant = Transacted | Queued | Persisted
}

Las constantes deben ser de un solo valor, como PI. No hay un rango de valores PI, solo hay PI.


75
2018-03-05 07:13



Lo que falta en las otras respuestas es que las enumeraciones tienen un tipo base entero. Puede cambiar el valor predeterminado de int a cualquier otro tipo integral excepto char como:

enum LongEnum : long {
    foo,
    bar,
}

Puede convertir explícitamente e implícitamente al tipo de base, que es útil en declaraciones de cambio. Tenga en cuenta que se puede convertir cualquier valor del tipo de base en una enumeración, incluso si la enumeración no tiene ningún miembro con el valor apropiado. Entonces, usar siempre la sección predeterminada en un interruptor es una buena idea. Por cierto, .NET en sí mismo permite incluso enumeraciones de puntos flotantes, pero no puede definirlas en C #, aunque creo que todavía puede usarlas (excepto en el interruptor).

Además, el uso de enums te brinda más seguridad de tipo. Si tiene la intención de usar, p. constantes int como parámetros de método, entonces podría llamar al método con cualquier valor int. Por supuesto, a través del casting también puede suceder con enumeraciones, pero no ocurrirá accidentalmente. Peor es la posibilidad de confundir el orden de los parámetros.

void method(int a, int b) {...}

Si la constante A solo puede entrar en a y la constante B solo puede entrar en b, entonces el uso de dos tipos de enumeración diferentes revelará cualquier uso indebido durante la compilación.


24
2018-03-05 16:22



Una constante es una característica del lenguaje que dice que la variable no cambiará el valor (por lo que el compilador puede hacer optimizaciones en torno a ese conocimiento) donde una enumeración es un tipo específico.

Las constantes pueden ser cualquier tipo de datos, pero una enumeración es una enumeración.

Utilizo una enumeración en cualquier lugar donde podría tener una serie de opciones y quiero mejorar la legibilidad del código. es decir, podría tener niveles de rastreo como un int con los valores 0, 1, 2 o como una enumeración como error, advertencia e información.

Los Enum también tienen la capacidad de ser utilizados como operadores bit a bit, es decir, FontStyle.Bold | FontStyle.Italic te daría fuentes en negrita y cursiva.


16
2018-03-05 07:09



Además de la respuesta de Robert:

  1. Use enum para un conjunto finito de valores nombrados. Realmente no le importa el valor numérico detrás de cada símbolo (pero aún tiene la capacidad de imponerlos, por ejemplo, para la compatibilidad con un sistema heredado).

  2. Robert: Sí, Enum's puede usarse como campos de bits. Utilizar el Banderas atributo (y asegúrese de que los miembros de la enumeración tengan valores numéricos adecuados).


6
2018-03-05 07:14



Una constante C # es similar a una variable en que da un nombre definido a un valor. Sin embargo, una constante difiere de una variable estándar porque una vez definida, el valor asignado a la constante nunca se puede cambiar. El principal beneficio de las constantes es su asistencia en la creación de código de auto documentación y la declaración de valores clave en un solo lugar, lo que permite un mantenimiento sencillo si el valor necesita ser actualizado y el software recompilado.

Mientras que las listas de enumeradores son útiles para definir secuencias y estados, particularmente cuando hay una progresión natural a través de esos estados. Esto se debe a que cada constante en la lista se puede formatear y comparar usando su nombre o valor. Una enumeración también se puede usar para definir un conjunto limitado de valores válidos.


3
2018-03-05 07:16