Question

Je lisais quelques énums et je les trouve très similaires à la déclaration de constantes. Comment saurais-je quand utiliser une constante plutôt qu'une énumération ou inversement? Quels sont certains des avantages de l’utilisation d’énums?

Était-ce utile?

La solution

Utilisez des énumérations lorsque vous souhaitez définir une plage de valeurs pouvant être quelque chose. La couleur est un exemple évident tel que:

public enum Colour
{
    White,
    Red,
    Blue
}

Ou peut-être un ensemble de choses possibles comme: (Exemple: j'ai volé de ici car je suis paresseux)

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

Les constantes doivent être pour une valeur unique, comme PI. Il n'y a pas de plage de valeurs PI, il n'y a que PI.

Autres conseils

Ce qui manque dans les autres réponses, c'est que les enums ont un type de base entier. Vous pouvez modifier la valeur par défaut de int à n’importe quel type d’intégrale, à l’exception de caractères tels que:

enum LongEnum : long {
    foo,
    bar,
}

Vous pouvez convertir explicitement et implicitement le type de base, ce qui est utile dans les instructions switch. Attention, il est possible de convertir n'importe quelle valeur du type de base en une énumération, même si cette énumération ne comporte aucun membre avec la valeur appropriée. Il est donc judicieux d’utiliser toujours la section par défaut dans un commutateur. BTW, .NET lui-même permet même des énumérations de valeurs à virgule flottante, mais vous ne pouvez pas les définir en C #, bien que je pense que vous puissiez toujours les utiliser (sauf dans switch).

En outre, l’utilisation d’énums vous offre davantage de sécurité. Si vous avez l’intention d’utiliser par exemple Les constantes int en tant que paramètres de méthode, je pourrais alors appeler la méthode avec une valeur int quelconque. Certes, via le casting, cela peut arriver avec des énums aussi, mais cela n'arrivera pas accidentellement. Le pire est la possibilité de confondre l’ordre des paramètres.

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

Si seule la constante A peut aller dans a et que seule B peut rester dans b, utiliser deux types d’énumération différents mettra au jour tout abus lors de la compilation.

Une constante est une fonctionnalité de langage qui dit que la variable ne changera pas de valeur (le compilateur peut donc faire des optimisations autour de cette connaissance) où une énumération est un type spécifique.

Les constantes peuvent être n’importe quel type de données mais une énumération est une énumération.

J'utilise un enum n'importe quel endroit où vous pourriez avoir plusieurs options et que vous souhaitez améliorer la lisibilité du code. Par exemple, vous pouvez avoir des niveaux de trace sous la forme d'un entier avec les valeurs 0, 1, 2 ou enum en tant qu'erreur, warning et info.

Les énumérations peuvent également être utilisées en tant qu’opérateurs au niveau du bit, c’est-à-dire FontStyle.Bold | FontStyle.Italic vous donnerait des polices en gras et en italique.

En plus de la réponse de Robert:

  1. Utilisez enum pour un ensemble fini de valeurs nommées. Vous ne vous souciez pas vraiment de la valeur numérique derrière chaque symbole (mais vous avez toujours la possibilité de les imposer, par exemple pour des raisons de compatibilité avec un système existant).

  2. Robert: Oui, les énumérations peuvent être utilisées comme champs de bits. Utilisez l'attribut Flags (et assurez-vous que les membres de l'enum ont valeurs numériques appropriées).

Une constante C # est similaire à une variable en ce sens qu'elle donne un nom défini à une valeur. Cependant, une constante diffère d'une variable standard car une fois définie, la valeur affectée à la constante ne peut jamais être modifiée. Le principal avantage des constantes est qu'elles permettent de créer du code auto-documenté et de permettre la déclaration des valeurs de clé en un seul endroit, ce qui facilite la maintenance si la valeur doit être mise à jour et le logiciel recompilé.

Alors que les listes d'énumérateurs sont utiles pour définir des séquences et des états, en particulier lorsqu'il existe une progression naturelle entre ces états. En effet, chaque constante de la liste peut être formatée et comparée à l'aide de son nom ou de sa valeur. Une énumération peut également être utilisée pour définir un ensemble limité de valeurs valides.

Une chose que je trouve pratique lorsque vous utilisez enum au lieu de const est que vous pouvez parcourir les valeurs dans un enum , c'est beaucoup plus difficile. faire cela avec les valeurs const .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top