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则保持引用方式。 |
C#中 readonly与const (转)
最新推荐文章于 2024-09-27 15:31:43 发布