class Constants
        {
            public const int A = 1;
            public const int B = A + 1;    //常数也能修改???
        } 
        class Test
        {
            static void Main()
            {
                Console.WriteLine("A = {0}, B = {1}", Constants.A, Constants.B);
                Console.ReadLine();
            }
        } const不是声明为常数吗????怎么也能修改他的值》?????

解决方案 »

  1.   

    const是常量,就是在编译时就赋值的,例如这时编译出的伪代码是
    public const int A = 1;
    public const int B = 2;
    而不是B=A+1;
    以前看过一个例子。就是
    在Assembly A里面,有
    class AA
    {
    public static const int a = 100;
    }
    在Assembly B里面,有
    Class BB{
    public static const int b = A.AA.a;
    }
    这时如果都编译了(生成了A.dll,B.dll),然后修改了Assembly A
    class A
    {
    public const int a = 200;
    }
    此时因为B.dll没有重新编译,这个b仍然是100,呵呵。
      

  2.   

    这个数是例子是从《.Net框架设计》上看到的。
      

  3.   

    印象中《Effective_C#》中提倡在使用常量时,尽量使用readonly而非const,呵呵。
      

  4.   

    const的初始值只能是const
    readonly初始值可以用变量(在构造函数里初始化),初始化后是只读的。如果
      public int A = 1;
      public const int B = A + 1; //常数也能修改???
    这样就不行了。6楼说得编译后直接赋值为常量完美解释。