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());