Const 编译时常量

相关定义:
  Const 定义的是静态常在对象初始化的时候赋值.以后不能改变它的值.属于编译时常量。
  Static 定义的是静态变量.可以再外部改变它的值..
  Readonly 是只读变量.属于运行时变量.可以在类初始化的时候改变它的值..
 
简要解释:
  我们都知道,const和static readonly的确非常像:通过类名而不是对象名进行访问,在程式中只读等等。在多数情况下能混用。二者本质的差别在于,const的值是在编译期间确定的,因此只能在声明时通过常量表达式指定其值。而static readonly是在运行时计算出其值的,所以还能通过静态构造函数来赋值。
  最近发现我们的代码中由于使用了const常量后在编译的时候不注意导致了一些问题.一兄弟修改了常量值后只编译常量值所在的DLL,没有编译调用常量的DLL就部署到测试的服务器上去,结果只能是悲剧的测试不通过了。。。
  现在通过如下的一个例子加深对编译时常量的理解。
 
举例:
  一、我们把const定义在一个名为TD_SPI的Project里
public class constStringTestEntety
    {
        public const string constTest_Name = "第一次测试";

        private string mTest_Name = "第一次测试";
        public string Test_Name
        {
            get { return mTest_Name; }
        }
    }
  二、在TD_FormController的Project里面写了个From(constStringTest)调用常量并用MessageBox显示出来。
    MessageBox.Show(constStringTestEntety.constTest_Name);

    constStringTestEntety vEntity = new constStringTestEntety();
    MessageBox.Show(vEntity.Test_Name);
  三、在TD_Debug的Project里面初始化constStringTest并将这个From显示出来。
    constStringTest fm = new constStringTest();
    fm.ShowDialog();
 
  四、我们将三个DLL按顺序编译好后调用常量和普通属性的MessageBox显示出来提示信息都是第一次测试
    
  五、我们修改常量值为第二次测试并只编译TD_SPI复制到运行目录,调用普通属性的MessageBox显示出来的提示信息是第二次测试调用常量的MessageBox显示出来的提示信息还是第一次测试
  
  六、我们将TD_FormController编译复制到运行目录,两个MessageBox显示出来的提示信息都改变为第二次测试
 
 
 
 
 
posted @ 2011-04-18 15:27  宋明浩  阅读(1079)  评论(0编辑  收藏  举报