常数与字段 CLR学习第七课
一、const:常数,字段在编译时,直接把值嵌入到使用它的程序集中,就是说,如果只改名常数定义的程序集中常数的值,而不重新编译整个程序,那么以前引用该常数的程序集中该常数是保持以前的值,而不是重新编译后的值(俗称:版本问题)。
二、字段:CLR支持有类型(静态)字段、实例字段(非静态);同时有分为只读字段(加上readonly)和读写字段;
静态字段,系统在该类型被加载进入一个应用程序域时,动态分配内存。通常发生在引用该类型的方法第一次被jit编译时。
实例字段,系统在该类型的实例被构造时动态为其分配内存。
三、只需将一个字段申明为 静态只读(static readonly)字段即可以解决const带来的本本问题。因为每次调用该字段static都要重新引用静态字段所在程序集的值。并且被申明为readonly,则其只是能读取,不能写。
四、实例只读字段只能在构造器内赋值(构造器在对象初次创建时被执行,且只执行一次;其值可以被多次赋值);
静态只读字段,只能在静态构造器内赋值,静态构造器在该类型初次被引用时执行。
如: public readonly String name = "why";只能在下面的构造器中赋值
public Class1( string n)
{
//
//TODO: 在此处添加构造函数逻辑
//
this.name = n;
};
static readonly int sn = 0;只能在下面的构造器中赋值
static Class1()
{
sn = 10;
}
只能在对于的构造器中赋值否则不能通过编译。