从IL代码看const,readonly,static的初始化
C#代码:

对应的IL代码:

initonly 表示常量值仅在初始化时赋值,如果是静态常量要在静态构造函数中赋值,如果是实例常量,要在构造函数中赋值。
literal 表示一个字面常量值。其值将被直接编译到IL代码中,而不会保留对这个常量的引用。
在声明静态字段的同时为其赋值的语句,在编译后会放在.cctor类型初始化器中的最前边。
在声明字段的同时为其赋值的语句,在编译后会放在.ctor构造方法的最前边。
先调用.cctor类型初始化再调用.ctor构造方法。
.method 一个方法的定义开始于 .method 指示符。
.entrypoint 指示符 通知运行时该方法是应用程序的入口点。应用程序中仅有一个方法可以具有该指示符。
.maxstack 指示符 指出该方法需要一个多大的栈。
.locals 指示符来声明局部变量
init 指定这些变量需要以其对应类型的默认值进行初始化。
MSIL 当中显式使用栈的方式:当你需要向一个指令传值的时候,首先需要把那些值压栈。而指令需要进行弹栈操作以读出数值。类似地,在调用方法时也需要将对象引用 ( 如果有的话 ) 和需要传递的参数按顺序压栈。在开始调用方法时,所有的参数以及对象引用会被弹栈。使用 ldloc 指令来将变量的值压栈;使用 stloc 指令将栈顶的值弹出并保存到指定变量中。