const在这里会直接编译进程序,program2相当于Console.WriteLine(1);
而static readonly则不会在编译时做这样的替换。

解决方案 »

  1.   

    const 在任何时候都不变,如果是
    using System;
    namespace Program1
    {
    public class A
    {
    public contst int X = 1;
    }
    }
    namespace Program2
    {
    class Test
    {
    static void Main() {
    Console.WriteLine(Program1.A.X);
    }
    }
    }在任何情况下输出都是 X当前的值 ,不论是否重新编译了Program2。比如修改为contst int X = 2;输出为2
    using System;
    namespace Program1
    {
    public class A
    {
    public static readonly int X = 1;
    }
    }
    namespace Program2
    {
    class Test
    {
    static void Main() {
    Console.WriteLine(Program1.A.X);
    }
    }
    }上面这种情况如果不重新编译Program2,而直接把Program1修改为public static readonly int X = 2;
    输出仍然是1
      

  2.   

    靠,我试了一下,例子后面的讲解说反了,采用read only时,program2的结果会变化,而采用const成员时不会产生变化
      

  3.   

    HNU(為楚有材,於斯為盛!) ,你好,感谢您的回答,但是您的说法似乎和我自己做的试验恰恰相反,不知道是什么原因?
    我是这样做的:把program1和program2分别放在两个源文件中,将program1编译成dll文件,在program2中使用这个dll。如果采用read only方式,program1改变x的值后,再运行program2,输出就是变化后的值;如果采用const int 定义,program1改变x的值后,再运行program2,输出不变。(都是在program2没有重新编译的情况)。请你再试一试好吗?谢谢!
      

  4.   

    这是MSDN文档的解释   class MyClass 
       {
          public int x;
          public readonly int y = 25; // Initialize a readonly field
          public readonly int z;      public MyClass() 
          {
             z = 24;   // Initialize a readonly instance field
          }      public MyClass(int p1, int p2, int p3) 
          {
             x = p1; 
             y = p2; 
             z = p3;
          }
       }
    注意   readonly 关键字与 const 关键字不同。const 字段只能在该字段的声明中初始化。readonly 字段可以在声明或构造函数中初始化。因此,根据所使用的构造函数,readonly 字段可能具有不同的值。另外,const 字段是编译时常数,而 readonly 字段可用于运行时常数,如下例所示:
    public static readonly uint l1 = (uint) DateTime.Now.Ticks;
      

  5.   

    const是编译期常量, readonly是运行期的常量
      

  6.   

    Const 在编译的时候就确定了他的值;
    ReadOnly 在程序运行期间你能给他一个值,但不能在改变他;
      

  7.   

    我在这行设断点,为什么const的X“无运行库值”而static readonly的有呢?楼主:怎么“在program2中使用这个dll”呢?
      

  8.   

    我是在命令行下运行的,命令如下(先要在环境变量中设置相应的path并进入到文件所在的目录)
    csc /target:library Program1.cs
    csc /reference:Program1.dll Program2.cs
    然后运行Program2就行了
      

  9.   

    其中第一个命令是生成dll,第二个命令是使用这个dll
      

  10.   

    是这样的,const是编译期常量,也就是说在编译的时候,使用const变量的地方会被替换成相应的值,比如:const int i = 100;
    j = i;以上代码会被直接编译成 j = 100;所以当const int i = 100被编译成一个dll里,即使i的值改变了,也不是影响j=i;的结果,因为在编译时这句话已经变成了 j = 100; 和i 没有关系了。
      

  11.   

    在<<.Net框架程序设计(修订版)>>一书中有比较详细的讲解,各位可以参考参考.