C#的只读域2007-09-23 本站 域的声明中如果加上了readonly修饰符,表明该域为只读域。对于只读域我们只能在域的定义中和它所属的构造函数中进行修改,在其它情况下,域是“只读”的。熟悉c和C++的程序员可能习惯了使用const和#define定义一些容易记住的名字来表示某个数值。static和readonly修饰符可以起到同样的效果:
public class A{public static readonly double PI=3.14159;public static readonly Color White=new Color(255,255,255);public static readonly int kByte=1024;......//other members}
这样,在程序中我们就可以直接使用PI来指代圆周率,white来表示白色,等等。那么,使用static readonly与使用const有什么区别呢?简单地说,const型表达式的值在编译时形成,而static readonly表达式的值直到程序运行时才形成。看下面这个例子:程序清单12-2:
using System;namespace Program1{public class A{ public static readonly int X=1;}}namespace Program2{class Test{static void Main(){Console.WriteLine(Program1.A.x);} }}
假定名字空间Program1和Program2表示两个分别独立编译的程序(有关名字空间的概念我们将放在后续章节中介绍)。在这里,域X的静态只读的,它的值由于是在编译时形成的,所以无论是否改变Program1中X的值,只要不重新编译Program2,Program2的输出就不会发生变化。如果Program2已经安装在用户的上,对Program1的升级不会影响到旧的Program2的使用。这种技术有利于进行版本控制。