C#中有两种常量类型,分别为readonly(运行时常量)与const(编译时常量),本文将就这两种类型的不同特性进行比较并说明各自的适用场景。 工作原理 public static readonly int A = 2; //A为运行时常量 public const int B = 3; //B为编译时常量 下面的表达式: int C = A + B; 经过编译后与下面的形式等价: int C = A + 3; 可以看到,其中的const常量B被替换成字面量3,而readonly常量A则保持引用方式。
public const DateTime D = DateTime.MinValue; 改成readonly就可以正常编译: public readonly DateTime D = DateTime.MinValue;
public class Class1 { public static readonly int A = 2; //A为运行时常量 public const int B = 3; //B为编译时常量 } public class Class2 { public static int C = Class1.A + Class1.B; //变量C的值为A、B之和 } Console.WriteLine(Class2.C); //输出"5"
假设Class1与Class2位于两个不同的程序集,现在更改Class1中的常量值: public class Class1 { public static readonly int A = 4; //A为运行时常量 public const int B = 5; //B为编译时常量 } 编译Class1并部署(注意:这时并没有重新编译Class2),再次查看变量C的值: Console.WriteLine(Class2.C); //输出"7" 结果可能有点出乎意料,让我们来仔细观察变量C的赋值表达式: public static int C = Class1.A + Class1.B; 编译后与下面的形式等价: public static int C = Class1.A + 3; 因此不管常量B的值如何变,对最终结果都不会产生影响。虽说重新编译Class2即可解决这个问题,但至少让我们看到了const可能带来的维护问题。
性能比较 适用场景
总结: Readonly是运行时常量,Const是编译时常量;前者灵活,后者高效;前者可以用于任何类型,后者只能用于数字和字符串; 分类: c#语言 |
|
来自: jiaochunqiang > 《c#》