上周末,我在为一个开源项目努力工作时,遇到了一些让我感到困惑的代码,需要在C#规范中查找用法。
有问题的代码如下:
internal static class SomeStaticClass
{
private const int CommonlyUsedValue = 42;
internal static string UseCommonlyUsedValue(...)
{
// some code
value = CommonlyUsedValue + ...;
return value.ToString();
}
}
我被搞糊涂了,因为这似乎是在静态类中编译完全没有问题地使用非静态字段!规范说明了(§10.4):常量声明可以包括一组属性(§17),一个new修饰符(§10.3.4)和四个访问修饰符(§10.3.5)的有效组合。这些属性和修饰符适用于常量声明的所有成员。尽管常量被视为静态成员,但常量声明既不需要也不允许使用static修饰符。在常量声明中出现相同的修饰符多次是错误的。
现在有点明白了,因为常量被视为静态成员,但剩下的句子仍然有些令人惊讶。为什么常量声明不需要也不允许使用static修饰符呢?坦率地说,我对规范不够了解,所以一开始并不立即理解这个问题,但为什么要决定在常量被视为静态时不强制使用static修饰符呢?
看一下该段落的最后一句话,我无法确定它是否直接涉及前面的陈述,并且在常量上有某种隐含的static修饰符,还是它本身就是常量的另一条规则。有人能帮我澄清一下吗?
static
和const
时,编译器会给出非常不错的错误提示信息。我认为这已经足够好了。 - Hamish Grubijan