![零基础C#学习笔记](https://wfqqreader-1252317822.image.myqcloud.com/cover/185/36710185/b_36710185.jpg)
3.4 常量
通过对前面的学习,我们知道了变量是随时可以改变值的量,那么,在遇到不允许改变值的情况时,该怎么办呢?这就需要用到本节要讲解的常量。
3.4.1 常量是什么
![img](https://epubservercos.yuewen.com/03FE8C/19471983108810806/epubprivate/OEBPS/Images/txt004_55.jpg?sign=1739354420-BzkAxBaiy1PCOS8lS7fueksKW6aZgrMm-0-ad8e47a18ba75a695fef6add91c60d75)
常量就是在程序运行过程中,值不能改变的量。比如,现实生活中的居民身份证号码、数学运算中的π 值等,这些都不会发生改变,它们都可以定义为常量。常量可以区分为不同的类型。例如,98、368 是整型常量;3.14、0.25 是实数常量,即浮点类型的常量;'m'、'r' 是字符常量。
3.4.2 常量的分类
![img](https://epubservercos.yuewen.com/03FE8C/19471983108810806/epubprivate/OEBPS/Images/txt004_56.jpg?sign=1739354420-NEd6KEut0udmPICL78qcCSRm4Y79xv6d-0-cd9f723b93039b97a4bc3d62da04afbb)
常量主要有两种,分别是const 常量和readonly 常量,下面分别对这两种常量进行讲解。
1.const 常量
在C# 中提到常量,通常指的是const 常量。const 常量也称为静态常量,它在编译时值就已经确定了。const 常量的值必须在声明时就进行初始化,而且之后不可以进行更改。
例如,声明一个正确的const 常量,同时再声明一个错误的const 常量,以便读者对比参考,代码如下。
![img](https://epubservercos.yuewen.com/03FE8C/19471983108810806/epubprivate/OEBPS/Images/txt004_57.jpg?sign=1739354420-P1jeNgqWsTcpjVHI0jjbWRGRJmhZrFCP-0-875520137f4f1253fe9897501f72705a)
2.readonly 常量
readonly 常量是一种特殊的常量,也称为动态常量。从字面上理解,readonly 常量可以进行动态赋值,但需要注意的是,这里的动态赋值是有条件的,它只能在构造函数中进行赋值,例如下面的代码。
![img](https://epubservercos.yuewen.com/03FE8C/19471983108810806/epubprivate/OEBPS/Images/txt004_58.jpg?sign=1739354420-JCLJIJtc82v0V1WmUZDj52QaNpOkMhBu-0-36c9855f3704bceee7e7b17926b1479b)
在构造函数以外的位置修改readonly 常量的值,比如,在Main 方法中进行修改,代码如下。
![img](https://epubservercos.yuewen.com/03FE8C/19471983108810806/epubprivate/OEBPS/Images/txt004_59.jpg?sign=1739354420-OBmaxvNP1yFpqOoq9DH8cSuJYFmGmcDR-0-2ec49cda0e0cc4b4da0a158fe6875587)
这时再运行程序,将会出现如图3.14 所示的错误提示信息。
![img](https://epubservercos.yuewen.com/03FE8C/19471983108810806/epubprivate/OEBPS/Images/txt004_60.jpg?sign=1739354420-m1EDKgTNWouKBLCxBZZqoLc2lFCOl24U-0-0950211e50edfc97718a1516c6134633)
图3.14 在构造函数以外的位置修改readonly 常量的值时出现的错误提示信息
3.const 常量与readonly 常量的区别
const 常量与readonly 常量的主要区别如下。
(1)const 常量必须在声明时初始化,而readonly 常量则可以在构造函数中初始化。
(2)const 常量在编译时就被解析,即将常量的值替换成初始化的值,而readonly 常量的值需要在运行时确定。
(3)const 常量可以定义在类中或方法体中,而readonly 常量只能定义在类中。