c#中的常量字段成员


constant field member in c#

大家好,我都很困惑,我怎么解释…当我们定义static const long size =((long)int.Maxvalue+1)/4时会发生什么…什么是readonly成员….


康斯特

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

1
2
3
4
public class MyClass
{
  public const double PI = 3.14159;
}

无法将类的成员声明为"static const"。

  • 因为声明为"const"的成员变量已经是"static"。

不能在代码中的任何其他地方更改应用程序中的PI,因为这将导致编译器错误。

只读

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

1
2
3
4
5
6
7
8
9
public class MyClass
{
  public readonly double PI;

  public MyClass()
  {
    PI = 3.14159;
  }
}

语句声明了一个长常量,它有大约四分之一的最大可能值int(2^31)。

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


你不能定义static const,因为const总是static。编译器将在此情况下生成错误("常量"xyz"不能标记为static")。

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

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


看看这里和这里。这是一个重复的问题。但我不知道如何在评论中添加超链接。有人告诉我吗?