Answers:
根据C#语言规范 (PDF第287页-或PDF的第300页):
即使常量被视为静态成员,常量声明也不需要也不允许使用静态修饰符。
C#const
与Java完全相同final
,只是绝对如此static
。我认为,const
变量不是非必需的static
,但如果您需要const
非变量访问static
,则可以执行以下操作:
class MyClass
{
private const int myLowercase_Private_Const_Int = 0;
public const int MyUppercase_Public_Const_Int = 0;
/*
You can have the `private const int` lowercase
and the `public int` Uppercase:
*/
public int MyLowercase_Private_Const_Int
{
get
{
return MyClass.myLowercase_Private_Const_Int;
}
}
/*
Or you can have the `public const int` uppercase
and the `public int` slighly altered
(i.e. an underscore preceding the name):
*/
public int _MyUppercase_Public_Const_Int
{
get
{
return MyClass.MyUppercase_Public_Const_Int;
}
}
/*
Or you can have the `public const int` uppercase
and get the `public int` with a 'Get' method:
*/
public int Get_MyUppercase_Public_Const_Int()
{
return MyClass.MyUppercase_Public_Const_Int;
}
}
好吧,现在我意识到这个问题是在4年前提出的,但是由于我花了大约2个小时的工作,包括尝试各种不同的答案和代码格式化方法,因此我仍然将其发布。:)
但是,据记录,我仍然觉得自己很傻。
final
行为完全类似于C#readonly
,完全不一样const
。
从MSDN:http : //msdn.microsoft.com/en-us/library/acdd6hb7.aspx
...此外,虽然const字段是编译时常量,但readonly字段可用于运行时常量...
因此,在const字段中使用static就像尝试在C / C ++中使已定义的(带有#define)静态一样……由于在编译时它会被其值替换,因此它会为所有实例(= static)初始化一次。