19

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

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 值)应该是静态的,所以没有初始化它的选项,这没有任何意义,对吗?

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

4

5 回答 5

35

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

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

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

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

(另一种选择是制作常量internal而不是public。)

于 2013-10-30T15:54:17.533 回答
6

是的,课程应该是static。但相关的是,这些值实际上应该是const吗?

任何声明的东西const都将被编译到任何引用的程序集中,所以如果这是一个类库,比如说,并且你发布了一个对这些 const 值进行更改的新版本,它们将不会被引用它们的程序集拾取。

在那种特殊情况下public static readonly string是有道理的。

但是,如果这些仅在单个特定程序集(例如控制台应用程序或 WinForms 应用程序)中可见,那么您应该声明该类internalconsts 就可以了。

于 2013-10-30T15:56:39.230 回答
2

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

于 2013-10-30T15:54:40.407 回答
1

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

于 2013-10-30T15:55:48.477 回答
0

真的,这取决于你。对于纯实用程序类,静态确实派上用场。

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

于 2013-10-30T15:57:54.187 回答