const与readonly

来源:互联网 发布:c语言简单小程序 编辑:程序博客网 时间:2024/05/01 16:10

 const: 它指定字段或局部变量的值是常数,不能被修改,不能声明为静态类型

readonly:只能用于字段(不能用于局部变量),能从构造器中更改


public常量应该是一个恒定值:如果一个程序集引用了另一个程序集中的常量,常量值将直接编译到引用程序集中,所以,如果被引用程序集中的值发生了改变,而且引用程序集没有重新编译,那么引用程序庥将继续使用原始值(const是在编译时确定的),而不是新值.将来可能改变的值应该指定为readonly,不要指定为常量.


和const字段不同,每个实例的readonly字段都可以是不同的,事实上,在声明时指定了一个readonly字段的值之后,这个值可以在构造器中更改为一个新值.除此之外,readonly字段既可以是实例字段,也可以是静态字段.另一个关键区别在于,可以在执行时为readonly字段赋值,而非只能在编译时赋值(猫理解的就是在构造器中赋值的情况吧)

将readonly应用于一个数组,不会冻结数组的内容.它只会冻结组中的元素数量,因为现在无法将只读字段重新赋值为一个新的实例.不过,数组中的元素仍然是可写的.(猫的理解就是声明了这个数组后 就没法给这个数组添加新的内存了,但是原内存里的东西是可以修改的)


以下为msdn里的解释:

readonly 关键字与 const 关键字不同。 const 字段只能在该字段的声明中初始化。 readonly 字段可以在声明或构造函数中初始化。 因此,根据所使用的构造函数, readonly 字段可能具有不同的值。 另外,虽然 const 字段是编译时常量,但 readonly 字段可用于运行时常量

原创粉丝点击