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。