c#中静态常量与动态常量的区别

C#中动态常量(readonly)与静态常量(const)的区别

 

C#中有两种常量类型,分别为readonly(运行时常量)与const(编译时常量)

ConstReadonly的异同:

相同点:

 const和readonly的值一旦初始化则都不再可以改写;

不同点:

  1. const定义时必须指定初始值,而readonly定义时可以不进行初始化(MS建议在定义时初始值),同时也可以在构造函数内指定初始值
  2. const隐含static,不可以再写static const;readonly则不默认static,如需要可以写static readonly;

 

  1. const是编译期静态解析的常量(因此其表达式必须在编译时就可以求值,内存无消耗);readonly则是运行期动态解析的常量(内存因保存常量,所以有消耗)
  2. const既可用来修饰类中的成员,也可修饰函数体内的局部变量;readonly只可以用于修饰类中的成员.
  3. const 对于引用类型的常数,可能的值只能是 string 和 null 
       readonly 可以是任何类型
  4. const 默认就是静态的,而 readonly 如果设置成静态的就必须显示声明。
  5. const是编译时常量,readonly是运行时常量;cosnt较高效,readonly较灵活。在应用上以static readonly代替const,以平衡const在灵活性上的不足,

例:

Readonly是否可以替换成const

1. static readonly MyClass myins = new MyClass();
2. static readonly MyClass myins = null;
3. static readonly B = 10;   static readonly A = B * 20;
4. static readonly int [] constIntArray = new int[] {1, 2, 3};

 

1:不可以 换成constnew操作符是需要执行构造函数的,所以无法在编译期间确定
2:可以换成const。我们也看到,引用类型的常量 (除了String)只能是Null
3:可以换成const。我们可以在编译期间很明确的说,A等于200
4:不可以换成 const 道理和1是一样的,虽然看起来1,2,3的数组的确就是一个常量。

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值