C# readonly 与 const

readonly代表着只读,const代表着不变, 在讲readonly 与const的区别之前,先讲只读与不变的区别。只读说明不能写,但并不意味着不变,不变代表着常数,永远不会变化,好像是废话。举例来说,一个人的真实出生日期是不变的。当这个人注册邮箱,填写个人的信息时,年龄一项是只读的,系统会根据该人的出生日期自动计算出年龄,不允许用户修改年龄。但这并不意味着年龄不会变化,去年25岁,今年肯定要显示26岁。


readonly的使用场景:只能修饰field,编译期知道字段是只读的,不允许再次赋值。但field的值有可能在运行期才确定下来,比如下面的代码:

private readonly DateTime now = DateTime.Now;

要到程序运行的时候,才知道now的值。

 

const的使用场景:出了可以修饰field,还可以修饰方法中的local variable,但是必须在编译期就确定下来field或者local variable的值,比如下面的代码:

const double Pi = 3.1415926;

const只能修饰primitive type 以及很特殊的引用类型string 和 null(string是不可变字符串,每次修改,都相当于重新创建了一个),为什么不能修饰其他的引用类型,因为其他的引用类型在编译期不能知道他们的确切值。

posted on 2011-12-29 20:14  Andy Niu  阅读(317)  评论(0编辑  收藏  举报