为什么readonly 的变量可以在构造函数中赋值两次!
如下:
class MyClass 
    {
       public readonly int a=44;
        
 
        public MyClass()
        {
            a = 1;
            a = 2;
        }
        
    }
readonly常量是运行时常量,也就是说,在运行时赋值后就不能再修改了,构造函数不就是运行时执行的么,为什么可以赋值两次!
另外,构造函数中给变量赋值到底是算 赋值呢还是算初始化呢,从构造函数中给变量赋值这点出发,如何看待赋值和初始化的区别呢!

解决方案 »

  1.   

    语法就是这么规定的。事实上,Readonly并不是“只读”的,只是编译器耍了一个花招而已。
    它限制了你在其它地方对它的赋值。
      

  2.   

    大家能解释下赋值和初始化的区别么!我的理解是申明变量的时候用“=”给一个值就是初始化了,其他的就是赋值。上面代码中,在构造函数的语句
    public MyClass()
      {  a = 1;
      a = 2;
      }
        
      应该是赋值,不是初始化吧!
      

  3.   

    这正是const和readonly的区别。
    const 字段只能在该字段的声明中初始化
    readonly 字段可以在声明或构造函数中初始化
      

  4.   

    请问,上述
    public MyClass()
      {  a = 1;
      a = 2;
      }
    中,a是叫赋值,还是初始化!
      

  5.   

    例如 A()
    {
       new object();
    }
    初始化
      

  6.   

    不是告诉你了么,这个readonly其实并不是只读的,它和普通变量没有区别,只是编译器不允许你在别的地方赋值。所以你管它叫赋值也可以,叫“初始化”也可以。反正它和你见到的所有变量都一样。