1、先看面试题:(增加一点复杂性)
static readonly int A = C * D;
static readonly int B = 10;
const int C = 5;
static readonly int D = B * C;
static void Main(string[] args)
{
Console.WriteLine("{0},{1},{2},{3}", A, B, C, D);
Console.ReadKey();
}
问:A、B、C、D数值是多少?
解答,C#中用Const定义的常量,在编译时值已经确定了,Const定义的常量不允许有表达式。而static readonly定义的字段,readonly定义的常量可以由表达式构成,在类第一次应用的时候就是调用静态构造函数初始化readonly定义的常量。代码是按顺序执行的,运行到static readonly int A = C * D;此时的D并未定义,clr就用类型默认值 初始化为0;所以A=5*0 结果是0.