字符串常量类应该是静态的吗?

时间:2013-10-30 15:52:30

标签: c# static const

我正在开发一个新项目,我注意到一些我不确定的代码。我用来证明这个问题的名称和价值都是假的。

public class MyConsts //Should it be static?
{
    public const string MyConst1 = "a";
    public const string MyConst2 = "b";
    public const string MyConst3 = "c";
    public const string MyConst4 = "d";
    ....
}

对于我的逻辑,这个类(只包含consts值)应该是静态的,所以没有选项来初始化它,这没有意义,我是否正确?

编辑:我正在编写代码盲,所以我混淆了字符串和常量的顺序 - 因为它不是我的问题的目标,我已经解决了这个问题。

5 个答案:

答案 0 :(得分:32)

是的,它是静态的。这表示您的意图,阻止客户甚至声明该类型的变量等。

您需要在类型部分之前移动const修饰符

public const string MyConst1 = "a";
...

如果值可能会发生变化,请考虑使用public static readonly字段而不是const - 否则该值将被烘焙到任何引用常量的代码中,这意味着您需要重建任何客户端代码,如果值发生变化。

(另一个选择是使常量internal而不是public。)

答案 1 :(得分:5)

是的,班级应为static。但相关的是,这些值实际应该是const吗?

声明为const的任何内容都将被编译到任何引用程序集中,因此,如果这是一个类库,并且您推出了一个新版本,其中包含对这些const值的更改,则它们将不会被引用它们的程序集。

在特定情况下public static readonly string是有道理的。

但是,如果这些只在单个特定程序集中可见(例如控制台应用程序或WinForms应用程序),那么您应该声明类internalconst s是正常的

答案 2 :(得分:2)

是的,如果值永远不会改变,它应该是静态的。正如您所说,允许客户端代码实例化它是没有意义的。

答案 3 :(得分:1)

如果它只包含const并且不包含任何其他内容,那么最好将其设置为静态类以防止实例化并因此阻塞。

答案 4 :(得分:0)

真的,这取决于你。静态确实对纯粹的实用类很有用。

请记住,静态类是密封的;它不能继承自己。