static readonly与const的区别!

2023-06-20,,

  • C#中有两种常量类型,分别为readonly(运行时常量)与const(编译时常量),本文将就这两种类型的不同特性进行比较并说明各自的适用场景。  

  • 工作原理  

  • 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则保持引用方式。  

  • 声明及初始化  

  • readonly常量只能声明为类字段,支持实例类型或静态类型,可以在声明的同时初始化或者在构造函数中进行初始化,初始化完成后便无法更改。  

  • const常量除了可以声明为类字段之外,还可以声明为方法中的局部常量,默认为静态类型(无需用static修饰,否则将导致编译错误),但必须在声明的同时完成初始化。