这两个用得时候总不明确,谁能解释下最主要区别是什么

解决方案 »

  1.   

    搞明白这一点就ok了!(1)const是编译时常量(2)readonly是运行时常量Demo:
    比如我一个类库中某一个类生明了一个const和readonly常量
    namespace AA
    {
       public  class A
       {
          public const string a1="1";
          public readonly string a2="1";
       }
    }现在我有另外一个程序集引用了改程序集,我再这个程序集中调用a的变量
    namespace BB
    {
       public  class B
       {
          public void Print()
          {
              A a=new A();
              console.writeline(a.a1);
              console.writeline(a.a2);
          }   
       } 
    }
    然后我编译AA程序集,在编译BB,控制台中执行Print,输出结果:1,1好接下来AA程序集发生了变化
    namespace AA
    {
       public  class A
       {
          public const string a1="2";
          public readonly string a2="2";
       }
    }
    这时我只编译AA程序集,不编译BB,问此时输出什么?这是很经典的例子,帮助你理解运行时与编译时,自己验证下吧!
      

  2.   

    const 编译时赋值替换,在编译时生成 IL,编译器会直接用常量值替换变量名。
    readonly 运行时常量,在运行时才加载其值。
      

  3.   

    readonly 关键字与 const 关键字不同。const 字段只能在该字段的声明中初始化。readonly 字段可以在声明或构造函数中初始化。因此,根据所使用的构造函数,readonly 字段可能具有不同的值。另外,const 字段为编译时常数,而 readonly 字段可用于运行时常数摘自于MSDN
      

  4.   

    关键在于版本控制的问题,如果在某个 dll 中更改一个 const 值,并单独重新生成,那么主应用程序不会受到任何影响,要获得新的值,主应用程序也必须重新编译。