const
1、const能修饰局部变量和字段(常量字段)。const变量的值在编译时就确定了,不可以在运行时改变。
2、常量字段自动成为静态字段。因为不需要为每个对象实例都生成一个新的字段实例。但若将一个常量字段显示声明为static,会造成编译错误。
readonly
1、只能用于字段。它指出字段值只能从构造器中更改,或直接在声明时指定。即在声明时指定了一个readonly字段的值后,这个值可以在构造器中更改为一个新值。
2、readonly字段既可以是实例字段,也可以是静态字段。
3、readonly应用于数组时,其不可更改性是指数组元素的数量一旦确定就不能在更改(除了在构造器中可以更改)即一旦声明好了一个readonly数组,就不允许再用new运算符来创建同一个数组的新实例,无论新实例的数组长度是否有变。但是,数组中每个元素的值是可以改变的。
例:
class Example
{
public readonly int[] a=new int[6] {1,2,3,4,5,6};
public void fun()
{
a[5]=10;//允许
a=new int[3];//不允许
a=new int[8];// 不允许
}
}