C#常量——const和readonly

C#常量主要分为两种:编译时和运行时常量

编译时常量用关键字const来定义,运行时常量用关键字readonly来定义

两者区别:

   编译时常量,在编译时便用该常量的值代替常量变量。

   运行时常量,在运行时返回一个运行时常量的变量引用

这两种变量引用方式会导致什么不同呢,且看下面代码:

  引用Effective C#中的例子:定义一个类库Limitation,其中呢定义了一个类Limitations,代码如下:

 

 

 

public class Limitations
{
public static readonly int startValue =5;
public const int endValue=10;
}

 

 

该类中包含两个量,一个是编译时常量,一个是运行时常量

我在主程序中,引用该类库,并调用该类的相关值,代码如下:

 

static void Main(string[] args)
{
for (int i = Limitations.startValue; i < Limitations.endValue; i++)
{
Console.WriteLine(i.ToString());
}
Console.Read();
}

 

运行结果:

5

6

7

8

9

现在我更新一下程序集Limitation,代码如下:

 

public class Limitations
{
public static readonly int startValue =105;
public const int endValue=120 ;
}

生成一下,替换掉原来的程序集,运行结果是什么也没有

这是为什么呢?原来是跟两种变量的执行行为有关系,对于编译时常量,在编译时会用其值替换掉所有的编译时常量变量,当你更换程序集时,在引用的程序中,原来编译时常量的值不会改变,所以endValue仍为10;而对于运行时变量,因为在运行时保留的是运行时变量的引用,所以会用新的值代替掉原来的值,导致startValue的值为105.所以没有运行结果。

 

从上边的例子,我们可以看出两种变量的使用情况,如果要使程序有好的可维护性可以选择运行时变量。

对于编译时常量,由于在编译时就已经用值替换了变量,可以使程序在性能上有轻微的提高,所以如果程序很少有变动,则可以选择编译时常量。

posted @ 2010-12-23 11:14  m苗子  阅读(5786)  评论(0编辑  收藏  举报