C# 为什么不能在类中声明const静态字符串

C# 为什么不能在类中声明const静态字符串,c#,C#,为什么不能在类中声明const静态字符串?在C#语言(以及PHP)中,必须使用静态只读,const是隐式的static,因此不能同时使用这两个关键字。这与C和C++不同,在这里,代码> const 不表示变量是否是静态的,只是它的值是不可修改的。 您可以这样声明一个常量字符串: const string SomeConstant = "abc"; const字段和staticreadonly字段之间也有细微的区别,但它们的相似之处在于不能更改它们的值。详情请参阅 所有常量声明都是 隐式静态,而

为什么不能在类中声明const静态字符串?在C#语言(以及PHP)中,必须使用静态只读,
const
是隐式的
static
,因此不能同时使用这两个关键字。这与C和C++不同,在这里,代码> const 不表示变量是否是静态的,只是它的值是不可修改的。 您可以这样声明一个常量字符串:

const string SomeConstant = "abc";
const
字段和static
readonly
字段之间也有细微的区别,但它们的相似之处在于不能更改它们的值。详情请参阅

所有常量声明都是 隐式静态,而C# 规范规定 (冗余)包含静态 禁止使用修改器。我相信这一点 是为了避免可能出现的混乱 如果读者看到两个 常量,一个声明为静态,一个 不是——他们可以很容易地假设 规格上的差异 这意味着语义上的差异。 话虽如此,却没有任何理由 禁止重复指定 访问修饰符,也是 默认值,其中有一个选项。 例如,(具体的)方法可以 被明确标记为私有 尽管这是默认情况。这个 规则似乎是在有 无选择(例如方法声明 在接口中)冗余 禁止使用修改器。哪里有 一个选择,这是允许的


摘自

我写了一篇关于这个的博客,这会让你更好地理解。看一看


大多数
原语
类型用作常量,而其他类型用作
静态只读

此问题与我的问题相同。有关详细信息,请参阅我关于此主题的文章: