C#中const字段与readonly字段的区别(实践版)

近期在看《CLR Via C#第三版》这本书,收获很多一直没拿出来分享分享,今天拿出来分享分享。O(∩_∩)O~,言归正传:

const字段始终是属于类型的成员,不能显示的把它声明为static的;const的值是在编译是确定的,它的值是保存在程序集的元数据中,所以不会为它分配内存。

 
readonly字段可以定义为类型的成员,也可以把它定义为实例的成员;它的值是在运行时确定的,需要分配内存空间,它的值可以通过类型的构造函数和反射修改。
 
下面举个例子说明它们的区别:
创建一个DLL类库在这个类库中定义一个类型A,如下:
public class A
{
    public const int X=1;
    public static readonly int Y=10;
}
 
然后创建一个控制台程序并引用DLL类库,在Main方法中访问类型A定义的两个字段。 如下
public static void Main()
     Console.WriteLine("const X:" + A.X);
     Console.WriteLine("readonly Y:" + A.Y);
     Console.ReadLine();
}
显示: 
const X:1
readonly Y:10
如图:

 
修改DLL类库中A类型的两个字段,如下:
public class A
{
    public const int X=2;
    public static readonly int Y=20;
}
编译DLL类型库,并更新到控制台程序的运行目录中再次运行控制台程序。结果显示:
const X:1
readonly Y:20
 
如图:

posted @ 2012-09-14 20:45  Two Hours  阅读(724)  评论(7)    收藏  举报