比较C#中的readonly与const
|
C#中有两种常量类型,分别为readonly(运行时常量)与const(编译时常量),本文将就这两种类型的不同特性进行比较并说明各自的适用场景。 工作原理
假设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可能带来的维护问题。
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"
public const DateTime D = DateTime.MinValue;改成readonly就可以正常编译: public readonly DateTime D = DateTime.MinValue;
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则保持引用方式。 const 的概念就是一个包含不能修改的值的变量。 |





浙公网安备 33010602011771号