Effective C#高效编程(02:常量)

前面写过一篇关于常量的文章:const与readonly,C#中的常量有两种定义:const与readonly。

const:编译期常量

readonly:运行时常量

首先分别定义一个常量:

1 public const int CurrentYearConst = 2013;
2 
3 public static readonly int CurrentYearReadonly = 2013;

1. const可在方法中声明,而readonly不可以。

  在方法中声明readonly变量时,系统提示:修饰符“readonly”对该项无效

  const不支持通过new来赋值,并且只支持数字和字符串。

2. 编译不同

1 if (CurrentYearConst == DateTime.Now.Year) { }
2 if (2013 == DateTime.Now.Year) { }
3 if (CurrentYearReadonly == DateTime.Now.Year) { }

第一行与第二行代码会编译成等效的IL,第三行代码编译成IL时,仍然为readonly变量。

这就造成了前一篇文章中所提到的,switch()可以使用const变量,不可以使用readonly变量

3. 性能与灵活性

从第二点中我们可以预见,const的性能会优于readonly,但是通过这种方式提升的性能几乎可以忽略不计,但是却丧失了灵活性

 

在性能几乎相当的情况下,灵活性就成了决定条件了,所以尽量使用readonly,而不是const

posted @ 2013-12-03 15:16  zhuhc  阅读(283)  评论(0编辑  收藏  举报