他们本质的差别在于,const的值是在编译时确定的,因此只能在声明时通过常量表达式指定其值。而static readonly是在运行时计算出其值的,所以还能通过静态构造函数来赋值。
(一)Const:
1)常量是在编译时定义的,不能在运行时改变;
不能在代码的任何地方改变常量,要不然编译出错。
2)只能在声明中赋值,且只能是常数或常数表达式;
出错的例子:
const double PI;
PI=3.14159;
3)类或构造函数在运行时通过new来初始化,所以不能设常量为类或构造函数。
出错的例子:
const int [] birds = new int[] {1, 2, 3};
4)不允许在常数声明中使用 static 修饰符。隐式地为静态的。
出错的例子:
static const double PI=3.14159;
(二)readonly
1)readonly是在运行时定义的,不同的构造函数会有不同的值。
2)readonly可以在声明时初始化,或者在构造函数中初始化。
3)可以用new来初始化。
4)不是隐式static, 所以可以用static 修饰。
(三)static
1)使用 static 修饰符声明属于类型本身而不是属于特定对象的静态成员。
2)不能通过实例引用静态成员,只可以通过类型名称引用它。
3)每个静态字段只有一个副本,不管有多少个类的实例,它们共享一个副本。
4)不可以使用 this 引用静态方法或属性访问器。 因为没有this指针。
5)static类中只能包含static成员,不能包含任何实例数据或方法。
学习网址:
http://en.csharp-online.net/const%2C_static_and_readonly
http://blog.csdn.net/Active_Life/archive/2009/03/02/3948587.aspx