====const====
来声明某个常量字段或常量局部变量。常量字段和常量局部变量不是变量而且不能修改。常量可以为数字、布尔值、字符串或null引用。
常数声明的类型指定声明引入的成员类型。常量局部变量或常量字段的初始值设定项必须是一个可以隐式转换为目标类型的常量表达式。
常数表达式是编译时可被完全计算的表达式。因此,对于引用类型的常数,可能的值只能是string和null。
不允许在常数声明中使用static修饰符。
====readonly====
是一个可在三个上下文中使用的修饰符:
在字段声明中,readonly指示只能在声明期间或在同一类的构造函数中向字段赋值。
在readonly struct定义中,readonly指示struct是不可变的。(c#7.2添加)
在ref readonly方法返回中,readonly修饰符指示该方法返回一个引用,且不允许向该引用写入内容。(c#7.2添加)
====const 与 readonly====
const字段只能在该字段的声明中初始化。可以在字段声明和任何构造函数中多次分配readonly字段。因此,根据所使用的构造函数,randonly字段可能具有不同的值。另外,虽然const字段是编译时常量,但readonly字段可用于运行时常量。
public static readonly uint timeStamp = (uint)DateTime.Now.Ticks;