存储我的程序使用的一组常量的最佳方法是什么?

我有我的程序使用的各种常量。 有些是string ,有些是int ,有些是double的。 什么是最好的方式来存储他们? 我不认为我想要一个枚举,因为数据不是全部相同的types,我想手动设置每个值。 我应该把它们都放在一个空的class级,还是有更好的办法?

你可能可以让他们在一个静态类,静态只读属性。

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

国际海事组织使用充满常量的类是罚款常量。 如果他们会偶尔改变,我build议在你的configuration和ConfigurationManager类中使用AppSettings。

当我有从AppSettings或类似的实际拉入“常量”,我仍然会有一个“常量”类,包装从configurationpipe理器读取。 拥有Constants.SomeModule.Setting总是更有意义,而不必直接使用ConfigurationManager.AppSettings["SomeModule/Setting"]在任何想要使用该设置值的地方。

因为SomeModule很可能是一个嵌套的类,所以你可以很容易地使用Dependency Injection把SomeModule直接注入到依赖它的类中。 您甚至可以在SomeModule之上提取一个接口,然后在消费代码中创build与ISomeModuleConfiguration的依赖关系,这样可以使依赖关系与常量文件分离,甚至可以使testing更加容易,特别是如果这些设置来自AppSettings,您可以使用configuration转换来更改它们,因为这些设置是特定于环境的。

我喜欢做的是以下(但一定要读到最后使用正确的常量types ):

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

阅读这个知道为什么const可能不是你想要的。 可能的常量types是:

  • const字段。 如果值将来可能会更改,请不要在程序集( publicprotected )之间使用,因为在编译时这些值将在其他程序集中进行硬编码。 如果更改该值,则旧值将被其他程序集使用,直到重新编译为止。
  • static readonly字段
  • static属性没有set

这是IMO的最佳方式。 不需要属性或只读:

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

一个空的静态类是适当的。 考虑使用几个类,以便最终得到一组相关的常量,而不是一个巨大的Globals.cs文件。

此外,对于一些int常量,请考虑符号:

 [Flags] enum Foo { } 

因为这允许像标志一样处理值 。

另一个投票使用web.config或app.config。 configuration文件是像连接string等常量的好地方。我不喜欢看源代码来查看或修改这些types的东西。 从.config文件中读取这些常量的静态类可能是一个很好的折衷scheme,因为它可以让您的应用程序访问这些资源,就像它们在代码中定义的一样,但是仍然可以让您灵活地使它们易于查看/编辑空间。

是的,除了与特定types相关的常量之外,用于存储常量的static class将会很好。

如果这些常量是影响应用程序行为的服务引用或开关,我将它们设置为应用程序用户设置。 这样,如果他们需要改变,你不必重新编译,你仍然可以通过静态属性类来引用它们。

 Properties.Settings.Default.ServiceRef 

我会build议与静态只读静态类。 请find下面的代码片段:

  public static class CachedKeysManager { public static readonly string DistributorList = "distributorList"; }