《C#编程入门与应用》—3.2.2 定义常量
3.2.2 定义常量
在 C# 中定义常量的方式有两种:一种 是静态常量;另一种是动态常量。
1.静态常量
静态常量使用const 进行定义,用 const 定义的常量,对于所有类对象而言都是一样 的。因此,需要像访问静态成员那样去访问 const 定义的常量,而用对象成员方式去访问则会出错误。另外,对于静态常量的访问, 在编译时,是用常量的值去替换常量。
静态常量一般在两种情况中用到,第一 种是用于程序中一旦设定就不允许被修改的 值,例如圆周率;另一种是用于在程序中经 常引用的值,例如人民币汇率。在使用 const 定义静态常量时,必须注意以下几点:
● const 默认是静态的,由类型来访问,不能与 static 同时使用。
● const 必须在字段声明时初始化。
● const 只能定义字段和局部变量。
● const 只能应用在值类型和string 类型上,其他引用类型常量只能定义为null。否则会引 发“只能用 null 对引用类型 (string 类型除外 ) 的常量进行初始化”的错误提示。
【例3-11】
声明圆周率常量 PI,根据用户输入的半径值计算圆的面积,并将最终的结果输出。代码 如下:
编译执行后,输入内容进行测试,假设输入圆的半径为 5,最后的结果如下:
请输入圆的半径:5
半径为 5 的圆面积为 78.539815
【例3-12】
如果多个常量类型相同,可以同时声明多个相同类型的常量。例如下面的代码:
class Calendar2
{
const int MONTHS = 12, WEEKS = 52, DAYS = 365;
}
【例3-13】
如果不会造成循环引用,用于初始化一个常量的表达式可以引用另外一个常量。例如下 面的代码:
2.动态常量
动态常量通过 readonly 定义,为什么称为动态常量?因为系统要为 readonly 所定义的常 量分配空间,即和类的其他成员一样拥有独立的空间。另外,readonly 所定义的常量除了在 定义的时候可以设置常量值外,还可以在类的构造函数中进行设置。
由于readonly所定义的常量相当于类的成员,因此使用const定义常量所受到的类型限制, 在使用 readonly 定义的时候全部消失,也就是说,可以用 readonly 定义任何类型的常量。 例如,通过 readonly 声明 MAX_VALUE 常量:
public readonly int MAX_VALUE = 10;
3.静态常量和动态常量的区别
综上所述,对比静态常量和动态常量,区别如下。
● 定义不同 静态常量声明的同时要设置常量值;动态常量声明的时候不需要设置常量值, 可以在类的构造函数中设置。
● 类型限制不同 静态常量的类型必须是值类型或string类型,且值不能通过new进行设置; 动态常量没有任何类型限制。
● 内存消耗 静态常量没有内存消耗;动态常量要分配内存,保存常量实体。
总地来说,静态常量的性能略高,没有内存开销,但是限制比较多,不灵活。相对而言, 动态常量灵活方便,但是性能略低,而且有内存开销。那么,在定义常量的时候,到底是使 用 const 还是 readonly 呢?建议开发人员根据自己的需要进行选择。
- 点赞
- 收藏
- 关注作者
评论(0)