C#常量————const和readonly

1.定义:
    相同:2者都是来定义常量、只读的。
   不相同:const为编译时常量,即在编译时便用该常量的值代替常量变量。
               readonly为运行时常量,即在运行时返回一个运行时常量的变量引用。

2.实例分析:
  (1)public class Limitation
  {
    public static readonly int startValue =5;
    public const int endValue=10;
  }
  注意:对于readonly修饰的运行是常量,只能在初始化时赋值,或者是构造函数中赋值。而不能在其他地方赋值。
  (2)public static readonly int A=2;
     public const int B=3;
     表达式为:int C=A+B;
         当编译后则会变成下面的形式等价:int C=A+3;

3.区别:

  (1)声明以及初始化
    readonly----声明为类字段,在声明的同时进行初始化或者在构造函数中进行初始化,初始化完成后便无法更改。
    const----除了可以声明类字段,也可以声明为方法中的局部变量。默认为静态类型(无需用static修饰),但必须在声明的同时完成初始化。
  (2)数据类型支持
    由于const常量在编译时将被替换为字面量,使得其取值类型受到了一定限制。const常量只能被赋予数字(整数、浮点数)、字符串以及枚举类型。
  (3)可维护性
    readonly以引用方式进行工作,某个常量更新后,所有引用该常量的地方均能得到更新后的值。
    const的情况要稍稍复杂些,特别是跨程序集调用。
4.适用场景 :

  在下面两种情况下:
    a.取值永久不变(比如圆周率、一天包含的小时数、地球的半径等)
    b.对程序性能要求非常苛刻
    可以使用const常量,除此之外的其他情况都应该优先采用readonly常量。

原文地址:https://www.cnblogs.com/minfan/p/6054212.html