C#中Const和Readonly的区别

const 的概念就是一个包含不能修改的值的变量。
常数表达式是在编译时可被完全计算的表达式。因此不能从一个变量中提取的值来初始化常量。
如果 const int a = b+1;b是一个变量,显然不能再编译时就计算出结果,所以常量是不可以用变量来初始化的。

readonly 允许把一个字段设置成常量,但可以执行一些运算,可以确定它的初始值。
因为 readonly 是在计算时执行的,当然它可以用某些变量初始化。
readonly 是实例成员,所以不同的实例可以有不同的常量值,这使readonly更灵活。

readonly 关键字与 const 关键字不同。

1. const 字段只能在该字段的声明中初始化。
readonly 字段可以在声明或构造函数中初始化。因此,根据所使用的构造函数,readonly 字段可能具有不同的值。
2. const 字段是编译时常数,而 readonly 字段可用于运行时常数。
3. const 默认就是静态的,而 readonly 如果设置成静态的就必须显示声明。
4.const 对于引用类型的常数,可能的值只能是 string 和 null。
readonly可以是任何类型

总结
const只能在初期就使用常量初始化好。对于每一次编译后的结果,const的值是固定的,而readonly的值是可以在运行的时候才确定值的~~






const是一个c语言的关键字,它限定一个变量不允许被改变。使用const在一定程度上可以提高程序的安全性和可靠性,另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一些帮助。另外const在其他编程语言中也有出现,如c++、php5、c#.net、hc08 c
const 一般修饰 的变量为只读变量
const定义应该为在定义的时候初始化 以后不能改变他的值
例:

复制代码代码如下:
const int a=1;//只能在定义的时候初始化;
a=2;//出现错误 因为a为只读变量
const 修饰一些指针时候的用法
int a;
const int *p=&a;// *p是不允许改变的 但是p是允许改变的
int * const p1 //定义了一个只读的变量p1 ;p1不可以改变 *p1是可以改变的

 

常数声明可以声明多个常数,例如:

复制代码代码如下:
public const double x = 1.0, y = 2.0, z = 3.0;

不允许在常数声明中使用 static 修饰符。
常数可以参与常数表达式,如下所示:
复制代码代码如下:
public const int c1 = 5;
public const int c2 = c1 + 100;

注意:

 

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

复制代码代码如下:
public static readonly uint l1 = (uint)datetime.now.ticks;

 

posted @ 2015-02-28 14:03  怪咖Eric  阅读(354)  评论(0编辑  收藏  举报