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

C# 字符串常量类应该是静态的吗?,c#,static,constants,C#,Static,Constants,我正在做一个新的项目,我注意到一些我不确定是真的代码。我用来证明这个问题的名称和值是假的 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"

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

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";
    ....
}
对于我的逻辑,这个类(只包含常量值)应该是静态的,所以没有初始化它的选项,这没有意义,对吗


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

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

您需要将
const
修饰符移到类型部分之前,不过:

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

如果值可以改变,考虑使用<代码>公共静态只读< /COD>字段,而不是<代码> const < /C> > -否则,该值将被烘焙到任何引用常量的代码中,这意味着如果值改变,则需要重建任何客户端代码。


(另一个选项是将常量设置为
内部
而不是
公共

是的,如果值从未更改,则应为静态。正如您所说,允许客户端代码实例化它是没有意义的。

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

是的,该类应该是
静态的。但是相关的,这些值实际上应该是
const

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

在这种特殊情况下,
公共静态只读字符串
是有意义的


但是,如果这些仅在单个特定程序集中可见(例如控制台应用程序或WinForms应用程序),那么您应该声明类
内部
,并且
常量
是正常的。

真的,这取决于您。对于纯实用程序类来说,Static确实很方便


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

这个类根本不应该存在。你想用资源来代替它。@JoelCoehoorn我见过很多这样的例子:这种方法非常适合,而资源充其量也不会带来任何好处。也就是说,
HtmlTags.Div=“Div”
作为常量的集合是非常好的,但是如果放入资源,则需要格外小心以避免本地化。@JoelCoehoorn-No,他应该有一个
IAbstractFactory
,它由
ConstantsFactory
继承,从资源中读取常量,然后使用IOC容器注入它们。谢谢。更改为static对内存或性能有影响吗?(因为据我所知,静态类是在应用程序启动时编译的,而不是在调用时编译的)@MishaZaslavsky:Nope-据我所知,你对静态类之间差异的“了解”是不真实的。在编译其他所有内容时编译的静态类,它们在第一次访问时就被初始化。