为什么我不能在c#中访问公共const?

时间:2011-03-17 21:11:16

标签: c#

我有这样的事情:

namespace MyNamespace {    

    public partial class MyClass: UserControl {

        public static const String MYCONST = "MyConstant";

我甚至无法从MyClass的任何地方看到MYCONST,为什么?

5 个答案:

答案 0 :(得分:12)

无论如何,静态上下文中都有一个常量,所以删除static关键字就可以了。

MSDN docs:

  

常量声明中不允许使用static修饰符。

原因是必须在编译时完全评估常量值,编译器所做的是它采用该值并且使用常量替换整个代码中常量的所有用法值。

这就是为什么有时可以更好地使用公共只读值,因为编译器用值替换用法,而是链接到只读变量。当使用来自另一个程序集的常量时,尤其要考虑这一点,因为您可能不会立即更新所有程序集,并且最终可能会使用旧的常量值来使用程序集。

参考:http://msdn.microsoft.com/en-us/library/e6w8fe1b(v=vs.80).aspx

答案 1 :(得分:6)

根据const

的文件
  

常量声明中不允许使用static修饰符。

从常量中删除static关键字,它应该可以正常工作。

修改
请注意,const将作为类成员使用,就像您有非static变量的const一样。但对于conststatic是隐式的,不允许输入。

答案 2 :(得分:5)

您使用的是哪种编译器?

一般来说,将常量公开并不是一个好主意。它们的行为与 readonly 变量不同,它们的字面值被编译到IL中。如果在另一个程序集中声明const,则会出现问题。例如,您可以为修改const值的程序集发布错误修复程序。但是,产品中的其他装配将继续使用旧值。抖动不会抱怨不匹配。不好。

如果它是一个'manifest'常量,那么公共const就可以了。与Math.PI一样,仅在另一个Universe中运行代码可能会产生意外结果。产品或公司名称已经存在风险。

答案 3 :(得分:3)

应该可以MyNamespace.MyClass.MYCONST

访问它

答案 4 :(得分:2)

您的代码中存在编译错误。

当我编译你的代码时,我得到了这个:

  

常量'MyNamespace.MyClass.MYCONST'不能标记为静态

在Eric Lippert的博客中查看此错误的动机: