为什么不能在类中声明const static字符串

3
为什么不能在类内部声明const static字符串?必须使用static readonly。

这个问题是一个副本,链接为https://dev59.com/kHE85IYBdhLWcg3wvGOm#2632844。有关详细信息,请参阅我的文章:http://blogs.msdn.com/b/ericlippert/archive/2010/06/10/don-t-repeat-yourself-consts-are-already-static.aspx。 - Eric Lippert
3个回答

20
在C#语言(以及PHP中),const隐式地是static的,因此您不需要同时使用这两个关键字。这与C和C++不同,其中const并不表示变量是静态的还是非静态的,只表示其值不可修改。
您可以像这样声明一个常量字符串:
const string SomeConstant = "abc";

const字段和静态readonly字段之间有一点差别,但它们都类似于您无法更改它们的值。详情请参阅此问题


1
所有常量声明都是隐式静态的,C#规范规定(多余的)static修饰符的使用是被禁止的。我认为这是为了避免读者看到两个常量,一个声明为静态的,一个没有声明,可能会产生混淆,他们可能会认为规范上的差异意味着语义上的差异。话虽如此,在有选择的情况下,可以多余地指定访问修饰符,即使它也是默认的。例如,一个(具体的)方法可以明确标记为private,尽管那是默认的。规则似乎是在没有选择的情况下(例如接口中的方法声明),多余的修饰符是被禁止的。在有选择的情况下,它是允许的。

摘自这里


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接