[From 7.1~7.2] 常量和字段
/----------------------------7.1常量------------------------------------------/
常量是值从不变化的符号。定义常量符号时,它的值必须能在编译时确定。确定后,编译器将常量值保存到程序元数据中。这意味着只能定义编译器识别的基元类型的常量。在C#中,以下基元类型,可用于定义常量:Boolean,Char,Byte,SByte,Int16,UInt16,Int32,UInt32,Int64,UInt64,Single,Double,Decimal和String。然而,C#也允许非基元类型的常量变量,前提是把值设为null。
常量总是被是为静态成员(C#不允许常量指定static关键字,因为常量总是隐式为static)
注:若要改变常量程序集则必须重新编译。
/----------------------------7.2 字段-----------------------------------------/
类型字段(静态字段)和实例字段(非静态字段)的内存分配时机
类型字段(静态字段):如果是类型字段,容纳字段数据所需的动态内存是类型对象中分配的,而类型对象是再类型加载到一个AppDomain时创建的。那么,什么时候将类型加载到一个AppDomain中呢?这通常时再引用了该类型的任何方法首次进行JIT编译的时候。
实例字段(非静态字段):容纳字段数据所需的动态内存是在构建类型的实例时分配的。
readonly:这种字段只能由一个构造器方法中的代码写入。不会被构造器以外的任何方法写入。注意,可利用反射来修改readonly字段。
C#允许使用内联初始化语法来初始化类的字段。但是C#实际是在构造器中对字段进行初始化的,字段的内联初始化只是一种语法上的简化。
例:
Class A
{
public int value = 5;
}