【发布时间】:2011-04-04 15:25:31
【问题描述】:
大家好,我很困惑const long size =((long)int.Maxvalue+1)/4我如何解释它......
当我们定义static const long size =((long)int.Maxvalue+1)/4时会发生什么...
什么是readonly 成员....
【问题讨论】:
标签: c#
大家好,我很困惑const long size =((long)int.Maxvalue+1)/4我如何解释它......
当我们定义static const long size =((long)int.Maxvalue+1)/4时会发生什么...
什么是readonly 成员....
【问题讨论】:
标签: c#
常量
常量成员是在编译时定义的,不能在运行时更改。常量使用 const 关键字声明为字段,并且必须在声明时进行初始化。例如;
public class MyClass
{
public const double PI = 3.14159;
}
不能将类的成员声明为“静态常量”。
不能在应用程序的代码中的其他任何地方更改 PI,因为这会导致编译器错误。
只读
只读成员就像一个常数,因为它代表一个不变的值。不同之处在于只读成员可以在运行时初始化,在构造函数中也可以在声明时初始化。 例如:
public class MyClass
{
public readonly double PI;
public MyClass()
{
PI = 3.14159;
}
}
【讨论】:
您不能定义static const,因为const 始终是static。在这种情况下编译器会产生错误('常量'XYZ'不能被标记为静态')。
readonly 成员只能初始化一次,即在构造函数中或在字段的声明中。
readonly 和 const 之间的区别在于,readonly 成员将在运行时评估,而 const 将在编译时评估。
【讨论】:
该语句声明了一个 long 常量,其值约为 int (2^31) 的最大可能值的四分之一。
const 无论如何都是静态的,不需要像这样装饰它们。只读字段可以是静态或实例,并且只能初始化一次(在构造函数中 - 您当然可以在声明时分配它,但该代码仅进入构造函数)。常量嵌入到代码中,而只读字段将在代码中引用(如果您是库开发人员,这很重要)。常量也可以用编译器认为的常量表达式来初始化,而只读字段可以用一些计算的结果来初始化。
【讨论】: