//const修饰的数据叫做 常量//常量一旦声明常量的值就不能改变。//常量在声明的时候 必须要赋初始值//C#编译器在编译的时候 声明常量的那句话不见了.//在使用常量的地方就用常量的值代替了.//某些数据在整个程序的运行过程中其值不会发生改变 我们就把这个值定义常量 以提高程序的运行效率 

内容:

我们都知道,const和static readonly的确很像:通过类名而不是对象名进行访问,在程序中只读等等。在多数情况下可以混用。二者本质的区别在于,const的值是在编译期间确定的,因此只能在声明时通过常量表达式指定其值。而static readonly是在运行时计算出其值的,所以还可以通过静态构造函数来赋值。明白了这个本质区别,我们就不难看出下面的语句中static 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};
5. void SomeFunction()
   {
      const int a = 10;
      ...
   }
6.private static string astr="abcd";
  private const string str = astr+"efg";
1:不可以换成const。new操作符是需要执行构造函数的,所以无法在编译期间确定
2:可以换成const。我们也看到,Reference类型的常量(除了String)只能是Null。
3:可以换成const。我们可以在编译期间很明确的说,A等于200。
4:不可以换成const。道理和1是一样的,虽然看起来1,2,3的数组的确就是一个常量。
5:不可以换成readonly,readonly只能用来修饰类的field,不能修饰局部变量,也不能修饰property等其他类成员。

6.错误:如果在astr前加上const或者const改为readonly即可;

总结:1.const、readonly和static readonly定义的常量,指定初始值后(包括在构造函数内指定的初始值) 将不可更改,可读不可写;
        2.const定义时必须指定初始值,而readonly定义时可以不进行初始化(MS建议在定义时初始值),同时也可以在构造函数内指定初始值,

并以构造函数内指定的值为准;

3.const和static readonly定义的常量是静态的,只能由类直接访问;而readonly定义的常量是非静态 的,只能由实例对象访问;  
        4.static readonly常量,如果在构造函数内指定初始值,则必须是静态无参构造函数;
        5.const是编译时常量,readonly是运行时常量;cosnt较高效,readonly较灵活。在应用上以static readonly代替const,以平衡const在灵活性上的不足,
           同时克服编译器优化cosnt性能,所带来的程序集引用不一致问题;

转载于:https://www.cnblogs.com/kongsq/p/5132478.html

常量(const)和只读变量(readonly)相关推荐

  1. 常量(const)与只读(readonly)字段

    (一)实践代码: using System;using System.Collections.Generic;using System.Linq;using System.Text;using Sys ...

  2. 1.2 - C#语言习惯 - 用运行时常量readonly而不是编译期常量const

    C#中有两种类型的常量:编译期常量和运行时常量.二者有着截然不同的行为,使用不当将会带来性能上或正确性上的问题. 这两个问题最好都不要发生,不过若难以同时避免的话,那么一个略微慢一些但能保证正确的程序 ...

  3. 【TypeScript】使用 const 关键字声明只读变量

    关键字 let 并不是声明变量的唯一新方法. 在 ES6 中,你还可以使用 const 关键字声明变量. const 具有 let 的所有出色功能,另外还有一个额外的好处,即使用 const 声明的变 ...

  4. 只读变量(常量)和位置变量

    只读变量(常量)-----UID:只能声明,但不能修改和删除---有效期:当前进程有效期,退出就没有了 声明只读变量: readonly name declare -r name 查看只读变量: re ...

  5. 石川es6课程---3、变量let和常量const

    石川es6课程---3.变量let和常量const 一.总结 一句话总结: let非常好用,尤其是let的块级作用域可以解决之前要(function(){})()立刻执行函数做的块级作用域 1.js中 ...

  6. 【C 语言】const 关键字用法 ( 常量指针 - const 在 * 左边 - 修饰数据类型 - 内存不变 | 指针常量 - const 在 * 右边 - 修饰变量 - 指针不变 )

    文章目录 一.const 普通用法 二.常量指针 ( 指向 常量 的指针 | 被指向的内存不能被修改 ) 三.指针常量 ( 指针不能被修改 ) 三.指向 常量 的 指针常量 四.const 在 * 左 ...

  7. C语言为什么被const声明的变量不是一个常量表达式

    所谓常量表达式,就是在程序运行后,在任何情况下,都能保持不变的值. const声明的变量不具有这样的性质,比如: 如果有这样一个函数: int func(int m) {const int n = m ...

  8. 【函数的定义、调用(嵌套调用、递归调用)、声明、函数的分类(有无返回值、有无参数)、变量(自动变量与静态变量、局部变量与全局变量、只读变量)】(学习笔记7--函数)

    第一篇博文,打卡新星计划第三季3.4~4.4,希望能有质的飞跃,顶峰相见 一.自定义函数 1.函数的定义 函数在使用前也需要定义,定义的格式如下: 数据类型 函数名([数据类型 参数1],[数据类型 ...

  9. linux脚本查看变量类型,Shell变量:Shell变量的定义、删除变量、只读变量、变量类型...

    变量是任何一种编程语言都必不可少的组成部分,变量用来存放各种数据.脚本语言在定义变量时通常不需要指明类型,直接赋值就可以,Shell 变量也遵循这个规则. 在 Bash shell 中,每一个变量的值 ...

最新文章

  1. 计算机机房建设监理,机房工程建设监理工作要点讲解
  2. Android手机启动流程与TEE OS
  3. 从源码中编译安装gmt官方开发版(优先体验最新功能)
  4. Python基础教程:类的特殊成员及高级特性
  5. jdk 中英对照 百度网盘_Hadoop部署一jdk与MySQL
  6. java爬取button_学习使用Java的webmagic框架爬取网页内容
  7. java 枚举放那个包,java枚举,包装类,math使用
  8. 《TensorFlow技术解析与实战》——1.2 什么是深度学习
  9. 《Android开发从零开始》——17.Service学习(3)
  10. 【操作系统/OS笔记06】虚拟内存、覆盖、交换
  11. windows查看linux文件工具,「实用工具」介绍几款Windows系统与Linux服务器传递文件的工具...
  12. 国外RSGIS权威期刊杂志
  13. MySQL多重嵌套查询
  14. excel计算机快捷键大全,Excel使用教程 Excel表格快捷键与功能键大全
  15. 嵌入式软件工程师笔试面试指南目录
  16. 智能电视怎么安装鸿蒙,智能电视如何通过手机电脑安装第三方软件,两种操作方法亲测可用...
  17. 图解积分法_计算机模拟图解积分法求气相吸收总传质单元数
  18. aws php sns,使用 AWS SNS 发送通知到 HTTP 终端
  19. excel排序求和:如何统计前几名数据合计 下篇
  20. 埃里克贝里奇_未来公司客服的标配?苹果Watch智能手表开启新时代

热门文章

  1. Linux 关闭服务后 鼠标 键盘用不了
  2. iOS开发出错whose view is not in the window hierarchy!的解决
  3. poj2750 PottedFlower(线段树的环状操作)
  4. Lync Server 2010迁移至Lync Server 2013故障排错 Part3 :内外网共享PPT提示证书问
  5. Nginx应用案例分享:压力测试
  6. 部署WSE3.0实战:性能、证书与WSE910错误
  7. Android Camera 2.0 Api
  8. Python的from import和import的区别
  9. 艾宾浩斯记忆表格excel_Excel全年学习复习计划表(艾宾浩斯遗忘曲线)
  10. 深度学习目标检测之 YOLO v3