Enums et constantes. Lequel utiliser quand?

Je lisais des enums et les trouvais très similaires à la déclaration de constantes. Comment pourrais-je savoir quand utiliser une constante plutôt qu’un enum ou vice versa. Quels sont certains des avantages d’utiliser des énumérations?

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

public enum Colour { White, Red, Blue } 

Ou peut-être une série de choses possibles comme: (Exemple que j’ai volé d’ ici comme je suis paresseux)

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

Les constantes doivent être pour une seule valeur, comme PI. Il n’y a pas de plage de valeurs PI, il y a juste PI.

Ce qui manque dans les autres réponses, c’est que les énumérations ont un type de base entier. Vous pouvez modifier la valeur par défaut de int à tout autre type intégral, sauf les caractères comme:

 enum LongEnum : long { foo, bar, } 

Vous pouvez convertir explicitement et implicitement le type de base, ce qui est utile dans les instructions de commutation. Attention, on ne peut convertir aucune valeur du type de base en enum, même si l’énumération n’a pas de membre avec la valeur appropriée. Donc, utiliser toujours la section par défaut dans un commutateur est une bonne idée. BTW, .NET lui-même autorise même les énumérations à valeurs à virgule flottante, mais vous ne pouvez pas les définir en C #, bien que je pense que vous pouvez toujours les utiliser (sauf dans switch).

De plus, l’utilisation de énumérations vous donne plus de sécurité. Si vous avez l’intention d’utiliser des constantes int comme parameters de méthode, alors je pourrais appeler la méthode avec n’importe quelle valeur int. Certes, le casting peut aussi se produire avec des enums, mais cela ne se produira pas accidentellement. Le pire est la possibilité de confondre l’ordre des parameters.

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

Si la constante A seulement peut entrer dans une constante et que B seule peut entrer dans b, alors l’utilisation de deux types différents d’énumération permettra de découvrir toute mauvaise utilisation lors de la compilation.

Une constante est une fonctionnalité de langage qui dit que la variable ne changera pas de valeur (de sorte que le compilateur peut 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 où où vous pourriez avoir un certain nombre d’options et que vous voulez améliorer la lisibilité du code. c’est-à-dire que vous pourriez avoir des niveaux de trace sous la forme int avec les valeurs 0, 1, 2 ou sous forme d’énumération en tant qu’erreur, avertissement et info.

Enum ont également la possibilité d’être utilisés comme des opérateurs de bits, à savoir FontStyle.Bold | FontStyle.Italic vous donnerait des fonts 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 la compatibilité avec un système hérité).

  2. Robert: Oui, Enum peut être utilisé comme champs de bits. Utilisez l’atsortingbut Flags (et assurez-vous que les membres de l’énum ont des valeurs numériques appropriées).

AC # constant est similaire à une variable en ce sens qu’il 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 leur aide dans la création de code auto-documenté ainsi que dans la déclaration de valeurs clés 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 à travers ces états. Cela est dû au fait que chaque constante de la liste peut être formatée et comparée en utilisant son nom ou sa valeur. Un enum peut également être utilisé pour définir un ensemble limité de valeurs valides.