Const 编译时常量
时间:2011-04-18 来源:宋明浩
相关定义:
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显示出来的提示信息都改变为第二次测试。
相关阅读 更多 +