const和readonly有什么区别

后端 (65) 2023-11-07 19:12

Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说const和readonly有什么区别,希望能够帮助你!!!。

摘要

常量可以当做常规的变量,只是他们的值在定义后不能再被修改,常量可以是任何的基本数据类型,比如整型,浮点型,字符串型,Class等。

正文

为什么使用常量?

像圆周率这样不变的变量,我们就可以使用常量,一般情况下是我们需要一个固定不变的变量时且不希望修改它的值时,就可以使用常量了。

C#中的常量是由3部分组成的,分别是:const、数据类型、常量名:

  • const:是C#中用来定义常量的关键字,不可省略。
  • 数据类型:与定义变量时的数据类型一样,指定一种类型的数据,如整型,字符串等。
  • 常量名:常量名与变量名一样,要遵守标识符的命名规则。
const string NAME = "张三";  

常量在定义时要求必须有值,所以在定义常量时就必须初始化

const 是编译时常量,如果有修改它,或是不初始化,编译都过不去。

const double DISCOUNT = 0.95;
/// <summary>
/// 程序入口
/// </summary>
/// <param name="arg">传入参数</param>
static void Main(string[] arg) //方法入口
{
    int sum = 20;
    double price = 7.5;
    double total=sum*price*discount;
    Console.WriteLine(total);
}

readonly 常量

readonly是一种特殊的常量,也称为动态常量,从字面理解上来看,readonly常量可以进行动态赋值,但需要注意的是,这里的动态赋值是有条件的,它只能在构造函数中进行赋值。

类似const 申明

readonly double DISCOUNT = 0.96;

在构造中初使化它的值

static readonly double DISCOUNT;
/// <summary>
/// 构造函数
/// </summary>
static A()
{
    DISCOUNT = 0.8;
}
/// <summary>
/// 程序入口
/// </summary>
/// <param name="arg">传入参数</param>
static void Main(string[] arg) //方法入口
{
    int sum = 20;
    double price = 7.5;
    double total = sum * price * DISCOUNT;
    Console.WriteLine(total);
}

在这里可以看出readonly的实际用处与const的不同,或是说优点。

class A //类名
{
    readonly double DISCOUNT;
    /// <summary>
    /// 构造函数
    /// </summary>
    A(double discount)
    {
        DISCOUNT = discount;
    }
    /// <summary>
    /// 程序入口
    /// </summary>
    /// <param name="arg">传入参数</param>
    static void Main(string[] arg) //方法入口
    {
        A a1 = new A(0.98);
        Console.WriteLine(a1.DISCOUNT);
        A a2 = new A(0.99);
        Console.WriteLine(a2.DISCOUNT);
    }
}

区别

const常量必须在声明时进行初始化,而readonly常量则可以延迟到构造函数中再进行初始化。

const常量在编译时就被解析,即将常量的值替换成了初始化的值,而readonly常量的值需要在运行时确定。

const常量可以定义在类中或方法中,而readonly常量只能定义在类中。

const和readonly有什么区别_https://bianchenghao6.com/blog_后端_第1张

今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。