常量(const)和只读变量(readonly)
//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)相关推荐
- 常量(const)与只读(readonly)字段
(一)实践代码: using System;using System.Collections.Generic;using System.Linq;using System.Text;using Sys ...
- 1.2 - C#语言习惯 - 用运行时常量readonly而不是编译期常量const
C#中有两种类型的常量:编译期常量和运行时常量.二者有着截然不同的行为,使用不当将会带来性能上或正确性上的问题. 这两个问题最好都不要发生,不过若难以同时避免的话,那么一个略微慢一些但能保证正确的程序 ...
- 【TypeScript】使用 const 关键字声明只读变量
关键字 let 并不是声明变量的唯一新方法. 在 ES6 中,你还可以使用 const 关键字声明变量. const 具有 let 的所有出色功能,另外还有一个额外的好处,即使用 const 声明的变 ...
- 只读变量(常量)和位置变量
只读变量(常量)-----UID:只能声明,但不能修改和删除---有效期:当前进程有效期,退出就没有了 声明只读变量: readonly name declare -r name 查看只读变量: re ...
- 石川es6课程---3、变量let和常量const
石川es6课程---3.变量let和常量const 一.总结 一句话总结: let非常好用,尤其是let的块级作用域可以解决之前要(function(){})()立刻执行函数做的块级作用域 1.js中 ...
- 【C 语言】const 关键字用法 ( 常量指针 - const 在 * 左边 - 修饰数据类型 - 内存不变 | 指针常量 - const 在 * 右边 - 修饰变量 - 指针不变 )
文章目录 一.const 普通用法 二.常量指针 ( 指向 常量 的指针 | 被指向的内存不能被修改 ) 三.指针常量 ( 指针不能被修改 ) 三.指向 常量 的 指针常量 四.const 在 * 左 ...
- C语言为什么被const声明的变量不是一个常量表达式
所谓常量表达式,就是在程序运行后,在任何情况下,都能保持不变的值. const声明的变量不具有这样的性质,比如: 如果有这样一个函数: int func(int m) {const int n = m ...
- 【函数的定义、调用(嵌套调用、递归调用)、声明、函数的分类(有无返回值、有无参数)、变量(自动变量与静态变量、局部变量与全局变量、只读变量)】(学习笔记7--函数)
第一篇博文,打卡新星计划第三季3.4~4.4,希望能有质的飞跃,顶峰相见 一.自定义函数 1.函数的定义 函数在使用前也需要定义,定义的格式如下: 数据类型 函数名([数据类型 参数1],[数据类型 ...
- linux脚本查看变量类型,Shell变量:Shell变量的定义、删除变量、只读变量、变量类型...
变量是任何一种编程语言都必不可少的组成部分,变量用来存放各种数据.脚本语言在定义变量时通常不需要指明类型,直接赋值就可以,Shell 变量也遵循这个规则. 在 Bash shell 中,每一个变量的值 ...
最新文章
- 计算机机房建设监理,机房工程建设监理工作要点讲解
- Android手机启动流程与TEE OS
- 从源码中编译安装gmt官方开发版(优先体验最新功能)
- Python基础教程:类的特殊成员及高级特性
- jdk 中英对照 百度网盘_Hadoop部署一jdk与MySQL
- java爬取button_学习使用Java的webmagic框架爬取网页内容
- java 枚举放那个包,java枚举,包装类,math使用
- 《TensorFlow技术解析与实战》——1.2 什么是深度学习
- 《Android开发从零开始》——17.Service学习(3)
- 【操作系统/OS笔记06】虚拟内存、覆盖、交换
- windows查看linux文件工具,「实用工具」介绍几款Windows系统与Linux服务器传递文件的工具...
- 国外RSGIS权威期刊杂志
- MySQL多重嵌套查询
- excel计算机快捷键大全,Excel使用教程 Excel表格快捷键与功能键大全
- 嵌入式软件工程师笔试面试指南目录
- 智能电视怎么安装鸿蒙,智能电视如何通过手机电脑安装第三方软件,两种操作方法亲测可用...
- 图解积分法_计算机模拟图解积分法求气相吸收总传质单元数
- aws php sns,使用 AWS SNS 发送通知到 HTTP 终端
- excel排序求和:如何统计前几名数据合计 下篇
- 埃里克贝里奇_未来公司客服的标配?苹果Watch智能手表开启新时代
热门文章
- Linux 关闭服务后 鼠标 键盘用不了
- iOS开发出错whose view is not in the window hierarchy!的解决
- poj2750 PottedFlower(线段树的环状操作)
- Lync Server 2010迁移至Lync Server 2013故障排错 Part3 :内外网共享PPT提示证书问
- Nginx应用案例分享:压力测试
- 部署WSE3.0实战:性能、证书与WSE910错误
- Android Camera 2.0 Api
- Python的from import和import的区别
- 艾宾浩斯记忆表格excel_Excel全年学习复习计划表(艾宾浩斯遗忘曲线)
- 深度学习目标检测之 YOLO v3