c#中的常量字段成员

时间:2010-08-27 05:46:15

标签: c#

大家好我很困惑const long size =((long)int.Maxvalue+1)/4我是如何插入的...... 当我们定义static const long size =((long)int.Maxvalue+1)/4时会发生什么...... 什么是readonly成员......

4 个答案:

答案 0 :(得分:16)

<强>常量

常量成员在编译时定义,不能在运行时更改。常量使用const关键字声明为字段,必须在声明时初始化。例如;

public class MyClass
{
  public const double PI = 3.14159;
}

不能将类的成员声明为“static const”。

  • 因为声明为“const”的成员变量已经是“静态的”。

在代码中的任何其他地方都无法更改PI,因为这会导致编译器错误。

<强>只读

只读成员就像一个常量,因为它代表了一个不变的值。不同之处在于readonly成员可以在运行时,构造函数中初始化,也可以在声明它们时进行初始化。 例如:

public class MyClass
{
  public readonly double PI;

  public MyClass()
  {
    PI = 3.14159;
  }
}

答案 1 :(得分:0)

请参阅herehere。这是一个重复的问题。但我不知道如何在评论中添加超链接。有谁告诉我?

答案 2 :(得分:0)

您无法定义static const,因为const始终为static。编译器会在这种情况下生成错误('常量'XYZ'不能标记为静态')。

readonly成员只能初始化一次,即在构造函数中或在字段的声明中。

readonlyconst之间的区别在于,readonly成员将在运行时进行评估,而const将在编译时进行评估。

答案 3 :(得分:0)

声明声明一个长常量,其大约为int(2 ^ 31)的最大可能值的四分之一。

const 无论如何都是静态的,不需要像这样装饰它们。只读字段可以是静态的或实例,只能初始化一次(在构造函数中 - 您当然可以在声明时分配它,但该代码仅进入构造函数)。常量嵌入到代码中,而只读字段将在代码中引用(如果您是库开发人员,这很重要)。另外,常量可以用编译器认为的常量表达式初始化,而只读字段可以用一些计算结果初始化。