我有这样的事情:为什么我不能在c#中访问公共常量?
namespace MyNamespace {
public partial class MyClass: UserControl {
public static const String MYCONST = "MyConstant";
我看不到MYCONST从任何地方甚至从MyClass的,为什么呢?
我有这样的事情:为什么我不能在c#中访问公共常量?
namespace MyNamespace {
public partial class MyClass: UserControl {
public static const String MYCONST = "MyConstant";
我看不到MYCONST从任何地方甚至从MyClass的,为什么呢?
无论如何,一个常量在静态上下文中可用,所以删除static
关键字,你会没事的。
MSDN文档:
static修饰符不恒定的声明允许。
的原因是一个恒定的值必须在编译时完全计算,什么编译器是,它需要的是价值和整个常数值的代码替换所有不变的惯例。
这就是为什么它有时可以更好地使用公共只读值而不是编译器而不是用值替换用法,而是链接到只读变量。当从另一个程序集使用常量时,这是特别需要考虑的事项,因为您可能不会一次更新所有程序集,而最终可能会使用旧的常量值进行程序集。
编号:http://msdn.microsoft.com/en-us/library/e6w8fe1b(v=vs.80).aspx
应该可以访问如MyNamespace.MyClass.MYCONST
你在你的代码编译错误。
当我编译代码我得到这个:
常量“MyNamespace.MyClass.MYCONST”不能标记静态
见动机上埃里克利珀的博客这个错误:
你使用的是哪种类型的编译器?
通常,公开常量不是一个好主意。它们的行为不同于只读变量,它们的字面值被编译到IL中。如果在另一个程序集中声明const,这是一个问题。例如,您可以为修改常量值的程序集提供错误修复程序。然而,产品中的其他装配将继续使用旧值。抖动不会抱怨不匹配。不好。
公共常量只有在'manifest'常量时才是可以的。像Math.PI一样,只有在另一个Universe中运行代码才会产生意外的结果。产品或公司名称已相当危险。
我绝对同意。如果它将是'public','protected'或'protected internal',则它应该是'readonly'。只有“私人”或“内部”值或仅限于单一方法的值应该是“const”。 – 2011-03-17 22:23:43
你有编译错误吗?它说什么 ? – driis 2011-03-17 21:12:25
你是如何访问它的? – 2011-03-17 21:12:47
尝试删除“静态”或“常量”关键字中的任意一个。 – Mikhail 2011-03-17 21:13:54