C# const与readonly 关键字的比较


最近使用项目的时候用到了常量,忽然发现这两个关键字不是很熟悉,特写此文,C#中const与readonly是C#里面的关键字。const与readonly定义的成员在初始化后都不能再改变

 


     
     
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using System.Text;
  4. namespace ConstVSReadOnly
  5. {
  6. public class Maths
  7. {
  8. public const double PI = 3.14;
  9. public readonly double G = 9.8;
  10. }

     
     
  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. Maths math = new Maths();
  6. // math.PI = 2; //编译出错,常量不能再改变值
  7. // math.G = 2; //编译出错,常量不能再改变值
  8. //Console.WriteLine("The PI="+math.PI); //编译出错
  9. Console.WriteLine( "The G="+math.G);
  10. <span style= "white-space:pre"> </span> Console.WriteLine( "The PI="+Maths.PI);
  11. Console.ReadKey();
  12. }
  13. }
  14. }


 
   



   二者有什么区别呢?

    1.定义为const的数据成员,隐式包含了static的含义,而定义为readonly的数据成为没有包含static的含义,比如可以在类级别直接调用const字段,而不能直接调用声明为readonly字段。上面的例子中,实例化的math不能调用PI,而直接使用类名却可以就是这个原因。

    2.const成员在定义时,必须初始化,不能通过构造函数为其初始化。也即是说const成员的值必须的编译时就知道,而不能在运行时赋值。而readonly的成员,如果在定义时没有初始化,那么可以在构造函数中进行初始化。即readonly是运行时常量,而const是编译时常量。

    3.const对于引用类型的常数,值只能是string和null。readonly可以是任何类型。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值