常数与字段 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;
        
    }

只能在对于的构造器中赋值否则不能通过编译。

原文地址:https://www.cnblogs.com/gowhy/p/2009100.html