《C#编程入门与应用》—3.2.2 定义常量

举报
清华大学出版社 发表于 2019/10/12 11:18:14 2019/10/12
【摘要】 本节书摘来自清华大学出版社《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,根据用户输入的半径值计算圆的面积,并将最终的结果输出。代码 如下:

image.png

       编译执行后,输入内容进行测试,假设输入圆的半径为 5,最后的结果如下:

         请输入圆的半径:5 

         半径为 5 的圆面积为 78.539815

【例3-12】 

       如果多个常量类型相同,可以同时声明多个相同类型的常量。例如下面的代码:

       class Calendar2

       {   

           const int MONTHS = 12, WEEKS = 52, DAYS = 365; 

       }

【例3-13】 

       如果不会造成循环引用,用于初始化一个常量的表达式可以引用另外一个常量。例如下 面的代码:

image.png


2.动态常量 

      动态常量通过 readonly 定义,为什么称为动态常量?因为系统要为 readonly 所定义的常 量分配空间,即和类的其他成员一样拥有独立的空间。另外,readonly 所定义的常量除了在 定义的时候可以设置常量值外,还可以在类的构造函数中进行设置。 

      由于readonly所定义的常量相当于类的成员,因此使用const定义常量所受到的类型限制, 在使用 readonly 定义的时候全部消失,也就是说,可以用 readonly 定义任何类型的常量。 例如,通过 readonly 声明 MAX_VALUE 常量:

      public readonly int MAX_VALUE = 10;

3.静态常量和动态常量的区别  

       综上所述,对比静态常量和动态常量,区别如下。 

    ● 定义不同 静态常量声明的同时要设置常量值;动态常量声明的时候不需要设置常量值, 可以在类的构造函数中设置。 

    ● 类型限制不同 静态常量的类型必须是值类型或string类型,且值不能通过new进行设置; 动态常量没有任何类型限制。 

    ● 内存消耗 静态常量没有内存消耗;动态常量要分配内存,保存常量实体。

    总地来说,静态常量的性能略高,没有内存开销,但是限制比较多,不灵活。相对而言, 动态常量灵活方便,但是性能略低,而且有内存开销。那么,在定义常量的时候,到底是使 用 const 还是 readonly 呢?建议开发人员根据自己的需要进行选择。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。