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

Mis*_*sky 17 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";
    ....
}
Run Code Online (Sandbox Code Playgroud)

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

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

Jon*_*eet 32

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

您需要在类型部分之前移动const修改器:

public const string MyConst1 = "a";
...
Run Code Online (Sandbox Code Playgroud)

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

(另一种选择是制作常数internal而不是public.)

  • 谢谢你。更改为静态是否对内存或性能有任何影响?(因为我知道静态类在应用程序开始时编译,而不是在调用时编译) (2认同)
  • @MishaZaslavsky:没有 - 就我所知,你对静态类差异的"知识"是不真实的. (2认同)

Jes*_*cer 5

是的,班级应该是static.但相关的,这些价值究竟应该是const多少?

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

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

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