建议创建常数类的最佳实践


25

我的团队成员之间有一个关于常量类声明的辩论。我们将常量变量移到一个单独的类中,如下所示。

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

我的一些团队成员建议我们将类声明为密封的,以避免覆盖选项,还有一些建议我们将其标记为静态,以避免创建Constant类的实例。
但是,我更喜欢使用静态构造函数将其作为Sealed,因为它将帮助我们在将来需要时初始化只读变量。请给我们一些建议。


无论您采用哪种方法,都应考虑使用系统中的接口而不是常量类本身,以避免对象与“全局”类型类之间的依赖关系?
dreza

因此,您同意将类设为静态,只是问是否现在还是以后应该添加静态构造函数?我在您的问题中没有任何反对意见,请澄清。
布朗


2
我不明白你的问题。如果类没有实例成员,则可以对其进行标记static。这与是否存在静态构造函数完全正交。
CodesInChaos

1
您的常数实际上是数学意义上的常数,还是这是一种配置形式?
CodesInChaos

Answers:


31

尚不清楚您的问题是什么,但是如果值确实是常数,那么使用以下简单选项不会出现问题:

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

static在类声明中使用表示您打算使用该类的意图。

Marc Gravell在这个Stack Overflow答案中描述了一些常量的潜在问题。只有您知道这些是否在您的代码库中是一个问题,但是如果值可以更改,请使用public static readonly而不是const,否则,如果值更改,则需要重新构建任何引用常量的代码。


1
您可以在这里清楚地说明使用const变量的注意事项之一。由于代码库趋于增长并变得更加复杂,因此最好避免使用const,恕我直言,性能提高通常不值得将来有潜在麻烦的风险。我更喜欢使用public static readonly变量作为常量。
joanlofe
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.