93 votes

En C #, quel est le meilleur moyen de stocker un groupe de constantes utilisées par mon programme?

J'ai plusieurs constantes que mon programme utilise. Certains sont string s, d'autres int s et d'autres double s. Quelle est la meilleure façon de les stocker? Je ne pense pas que je veux un Enum, parce que les données ne sont pas toutes du même type, et je veux définir manuellement chaque valeur. Devrais-je simplement les ranger dans une classe vide ou y a-t-il une meilleure solution?

128voto

Daniel A. White Points 91889

Vous pourriez probablement les avoir dans une classe statique, avec des propriétés statiques en lecture seule.

 public static class Constants
{
   public static string SomeConstant { get { return "Some value"; } }
}
 

26voto

Chris Marisic Points 11495

L'OMI à l'aide d'une classe pleine de constantes est très bien pour les constantes. Si ils vont changer de semi-parfois je recommande d'utiliser AppSettings dans votre config et la classe ConfigurationManager à la place.

Edit: Quand j'ai des "constantes" qui sont en fait tirés à partir AppSettings ou similaire, je vais toujours avoir une "constantes" de la classe qui encapsule la lecture à partir du gestionnaire de configuration. C'est toujours plus utile d'avoir Constants.SomeModule.Setting au lieu d'avoir à recourir directement à ConfigurationManager.AppSettings["SomeModule/Setting"] sur toute la place qui veut consommer de ladite valeur de réglage.

Les points de Bonus pour cette installation, depuis SomeModule serait susceptible d'être une classe imbriquée à l'intérieur du fichier de Constantes, vous pouvez facilement utiliser l'Injection de Dépendance à injecter soit SomeModule directement dans les classes qui en dépendent. Vous pouvez aussi même extraire d'une interface sur le dessus de l' SomeModule , puis de créer un depenedency d' ISomeModuleConfiguration de votre consommation de code, cela vous permettra ensuite de dissocier la dépendance à l'une des Constantes des fichiers, et même potentiellement rendre le test plus facile, surtout si ces paramètres viennent de AppSettings et de les modifier à l'aide de config transformations, car les paramètres sont spécifiques à un environnement.

19voto

Marcel Gosselin Points 2730

Premièrement, si vos constantes doivent être utilisées à partir de plusieurs assemblys, utilisez les variables static readonly . S'ils ne sont utilisés que dans votre assemblée, continuez avec const .

Ce que j'aime faire est le suivant:

 internal static class ColumnKeys
{
    internal const string Date = "Date";
    internal const string Value = "Value";
    ...
}
 

11voto

Philip Wallace Points 4550

C’est la meilleure façon pour l’OMI. Pas besoin de propriétés, ou en lecture seule:

 public static class Constants
{
   public const string SomeConstant = "Some value";
}
 

4voto

emptyset Points 1208

Une classe statique vide est appropriée. Pensez à utiliser plusieurs classes afin de vous retrouver avec de bons groupes de constantes connexes, et non pas un seul fichier Globals.cs géant.

De plus, pour certaines constantes int, considérons la notation:

 [Flags]
enum Foo
{
}
 

Comme cela permet de traiter les valeurs comme des drapeaux .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X