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

use*_*291 4 c#

我有这样的事情:

namespace MyNamespace {    

    public partial class MyClass: UserControl {

        public static const String MYCONST = "MyConstant";
Run Code Online (Sandbox Code Playgroud)

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

Mik*_*erg 13

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

MSDN文档:

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

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

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

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


Alb*_*nbo 6

根据文件 const

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

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

编辑
请注意,a const将作为类成员使用,就像您拥有staticconst变量一样.但对于conststatic是隐含的,不允许打出来.

  • 你不可能是静态的和恒定的。就像是隐形的、粉红色的。 (2认同)

Han*_*ant 5

您使用的是什么类型的编译器?

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

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