C#中,const 与readonly是两个比较有用的关键字。const 与 readonly
定义的数据成员在初始化都不能再改变。
比如定义了
public class
MathUtitlity
{
public
const double PI =
3.14;
public readonly double
E = 2.782;
}
class
Program
{
static
void Main(string[]
args)
{
MathUtitlity
math = new
MathUtitlity();
math.E
=
2.5;//编译错误,不能改变已经初始化的readonly字段
MathUtitlity.PI
= 3.1456;//编译错误,不能改变已经初始化的const
字段
}
二者有什么区别呢?
1.定义为const的数据成员,隐式包含了static的含义,而定义为readonly的数据成为没有包含static的含义,比如可以在类级别直接调用const字段,而不能直接调用声明为readonly字段
比如上面可以
Console.WriteLine(MathUtitlity.PI);
//使用正确
Console.WriteLine(MathUtitlity.E);//编译错误,不能在类级别直接调用readonly成员,若想直接这样调用,可以加上static
关键字,如下
public static readonly double E =
2.782;//现在可以MathUtitlity.E了
2.const成员在定义时,必须初始化,不能通过构造函数为其初始化。也即是说const成员的值必须的编译时就知道,而不能在运行时赋值。而readonly的成员,如果在定义时没有初始化,那么可以在构造函数中进行初始化。比如
public
class
MathUtitlity1
{
public
readonly double E;
public
MathUtitlity1()
{
E
=
2.732;
}
public
double
GetValueE()
{
return
E;
}
}
然后可以这样调用
MathUtitlity1
m1 = new
MathUtitlity1();
Console.WriteLine(m1.GetValueE());