字段是一种数据成员,其中容纳了一个值类型的实例或者对一个引用类型的引用。
//--
CLR支持类型(静态)字段和实例(非静态)字段。如果是类型字段,容纳字段数据所需的动态内存是在类型对象中分配的,而类型对象是在类型加载到一个AppDomain时创建的。那么,什么时候将类型加载到一个AppDomain中呢?这通常是在引用了该类型的任何方法首次进行JIT编译的时候。如果是实例字段,容纳字段数据所需的动态内存是在构造类型的实例时分配的。
//--
由于字段存储在动态内存中,所以它们的值在运行时才能获取。字段还解决了常量存在的版本控制问题。此外,字段可以是任何数据类型,不想常量那样仅仅局限于编译器内置的基元类型。
//--
CLR支持readonly字段和read/write字段。大多数字段都是read/write字段,意味着在代码执行过程中,字段值可多次改变。但readonly字段只能在构造器方法中写入。(构造器方法只能调用一次,即对象首次创建时。)编译器和验证机制确保readonly字段不会被构造器以外的任何方法写入。注意,可利用反射来修改readonly字段。
//--
内联(inline)初始化是指在代码中直接赋值来初始化,而不是将对构造器的调用写出来。
C#允许使用这种简便的内联初始化语法来初始化类的常量、read/write字段和readonly字段。
C#实际是在构造器中对字段进行初始化的,字段的内联初始化只是一种语法上的简化。另外,在C#中初始化字段时,如果使用内联语法,而不是在构造器中赋值,有一些性能问题需要考虑。
//--
当某个字段是引用类型,并且该字段被标记为readonly时,不可改变的是引用,而非字段引用的对象。