1.const 关键字用于修改字段或局部变量的声明。它指定字段或局部变量的值是常数,不能被修改。
如:
const int x = 0;
public const double gravitationalConstant = 6.673e-11;
private const string productName = "Visual C#";
常数声明的类型指定声明引入的成员类型。常数表达式必须产生具有目标类型或者可隐式转换为目标类型的类型的值。
常数表达式是在编译时可被完全计算的表达式。因此,对于引用类型的常数,可能的值只能是 string 和 null。
常数声明可以声明多个常数,例如:
public const double x = 1.0, y = 2.0, z = 3.0;
不允许在常数声明中使用 static 修饰符。
常数可以参与常数表达式,如下所示:
public const int c1 = 5;
public const int c2 = c1 + 100;
2.readonly 关键字是可以在字段上使用的修饰符。当字段声明包括 readonly 修饰符时,该声明引入的字段赋值只能作为声明的一部分出现,或者出现在同一类的构造函数中。
只能在下列上下文中对 readonly 字段进行赋值:
-
当在声明中初始化变量时,例如:public readonly int y = 5;
-
对于实例字段,在包含字段声明的类的实例构造函数中;或者,对于静态字段,在包含字段声明的类的静态构造函数中。也只有在这些上下文中,将 readonly 字段作为 out 或 ref 参数传递才有效。
readonly 关键字与 const 关键字不同。const 字段只能在该字段的声明中初始化。readonly 字段可以在声明或构造函数中初始化。因此,根据所使用的构造函数,readonly 字段可能具有不同的值。另外,const 字段是编译时常量,而 readonly 字段可用于运行时常量,
如此行所示:public static readonly uint l1 = (uint)DateTime.Now.Ticks;