Suggérer une meilleure pratique pour créer une classe Constantes

25

Il y a un débat entre les membres de mon équipe sur la déclaration d'une classe Constants. Nous déplaçons les variables constantes dans une classe distincte comme ci-dessous.

public class Constants
{
      public const string StateId = "ST";
      public const string CountryId = "CI";
}

Quelques membres de mon équipe ont suggéré que nous déclarions la classe comme scellée pour éviter de remplacer l'option, et certains suggèrent que nous la marquions comme statique pour éviter la création d'instance de la classe Constant.
Cependant, je préfère l'avoir comme scellé avec un constructeur statique, car cela nous aidera à initialiser les variables en lecture seule dans le futur. Veuillez nous donner quelques conseils à ce sujet.

user46506
la source
Quel que soit votre choix, une considération pourrait être d'utiliser une interface dans le système plutôt que la classe de constantes elle-même pour éviter les dépendances entre les objets et une classe de type "Global" ???
dreza
Vous êtes donc d'accord pour rendre la classe statique et vous demandez simplement si vous devez ajouter un constructeur statique maintenant ou plus tard? Je ne vois aucune opinion contraire dans votre question, veuillez clarifier.
Doc Brown
2
Je ne comprends pas votre question. Si une classe n'a pas de membres d'instance, vous pouvez la marquer static. Ceci est complètement orthogonal à la présence ou à l'absence d'un constructeur statique.
CodesInChaos
1
Vos constantes sont-elles réellement des constantes au sens mathématique, ou s'agit-il d'une forme de configuration?
CodesInChaos

Réponses:

31

Ce n'est pas tout à fait clair quelle est votre question, mais si les valeurs sont vraiment constantes, je ne vois pas de problème avec l'option simple de:

    public static class LocationConstants
    {
        public const string StateId = "ST";
        public const string CountryId = "CI";
    }

L'utilisation staticdans la déclaration de classe signale votre intention aux fins de cette classe.

Marc Gravell décrit certains des problèmes potentiels avec les constantes dans cette réponse Stack Overflow . Vous seul saurez s'il s'agit d'un problème dans votre base de code, mais si les valeurs peuvent changer, utilisez public static readonlyplutôt const, sinon tout code faisant référence aux constantes devra être reconstruit si les valeurs changent.

jcorcoran
la source
1
L'une des mises en garde que vous pouvez trouver en utilisant des variables const est clairement expliquée ici . Étant donné que les bases de code ont tendance à croître et à devenir plus complexes, il vaut mieux éviter d'utiliser const, le gain de performances ne vaut généralement pas les risques de problèmes potentiels à l'avenir, à mon humble avis. Je préfère utiliser des public static readonlyvariables pour les constantes.
joanlofe