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

时间:2009-11-12 17:38:15

标签: c# constants

我的程序使用了各种常量...... stringintdouble等等...存储它们的最佳方法是什么? ?我认为我不想要Enum,因为数据的类型并不完全相同,我想手动设置每个值。我应该把它们全部存放在一个空的课堂上吗?或者有更好的方法吗?

9 个答案:

答案 0 :(得分:122)

您可能可以将它们放在静态类中,并使用静态只读属性。

public static class Routes
{
    public static string SignUp => "signup";
}

答案 1 :(得分:26)

IMO使用一个充满常量的类对于常量来说很好。如果他们偶尔会有一些改变,我建议在配置和ConfigurationManager类中使用AppSettings。

当我从AppSettings或类似的实际中提取“常量”时,我仍然会有一个“常量”类来包装配置管理器的读数。拥有Constants.SomeModule.Setting而不必在任何想要消耗所述设置值的地方直接使用ConfigurationManager.AppSettings["SomeModule/Setting"]更有意义。

此设置的加分点,因为SomeModule可能是Constants文件中的嵌套类,您可以轻松地使用依赖注入将SomeModule直接注入依赖它的类中。您甚至可以在SomeModule之上提取接口,然后在消费代码中创建对ISomeModuleConfiguration的依赖性,这样就可以将依赖关系与Constants文件分离,甚至可能进行测试更容易,特别是如果这些设置来自AppSettings并且您使用配置转换更改它们,因为设置是特定于环境的。

答案 2 :(得分:18)

我喜欢做的是以下内容(但请务必阅读以使用正确的类型的常量):

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

Read this了解为什么const可能不是您想要的。可能的类型的常量是:

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

答案 3 :(得分:11)

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

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

答案 4 :(得分:4)

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

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

[Flags]
enum Foo
{
}

因为这允许treating the values like flags

答案 5 :(得分:3)

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

答案 6 :(得分:1)

是的,用于存储常量的static class就可以了,除了与特定类型相关的常量。

答案 7 :(得分:0)

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

Properties.Settings.Default.ServiceRef

答案 8 :(得分:0)

我建议使用static readonly静态类。请在下面找到代码段:

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