Const是在编译的时候为其赋值,一旦赋值其值永远都不能改变。声明成const 类型的变量必须在声明的同时为其赋值,这样编译器在编译的时候就计算其具体“值”。正是因为这样的原因const类型的数据类型应该是简单数据类型或String类型。因为在引用类型中除了String类型外其它的引用类型都不能在编译的时候获取其准确值(null除外)。而static readonly 是在运行时为其赋值,所以其类型可以是值类型也可以是引用类型。static readonly类型的变量只有两种途径为其赋值,在声明该变量的时候或在默认的静态构造函数里面为其赋值。实际上这两种方法最后生成的IL代码是相同的(都是在静态构造函数中赋值)。值得注意的是,当static readonly类型变量是引用类型时,在当前类中此变量虽然不能再进行new 操作分配空间,但是可以更改此变量内的field的值。
如下面代码:
1
using System;
2
3
namespace ConsoleApplication1
4
2
3
4
如果把类User换成结构体的话,user.username = “jjj”这行就不能通过编译了。