常量(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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/471158.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OSPF协议及链路状态算法(详解)

一、路由选择协议分类回顾 二、OSPF协议 开放最短路径优先OSPF协议:“开放”标明OSPF协议不是受某一家厂商控制,而是公开发表的;“最短路径优先”是因为使用了Dijkstra提出的最短路径算法SPF。OSPF最主要的特征就是使用分布式的链路状态协议…

LeetCode 2196. 根据描述创建二叉树(哈希)

文章目录1. 题目2. 解题1. 题目 给你一个二维整数数组 descriptions ,其中 descriptions[i] [parenti, childi, isLefti] 表示 parenti 是 childi 在 二叉树 中的 父节点,二叉树中各节点的值 互不相同 。此外: 如果 isLefti 1 &#xff0…

Web框架——Flask系列之abort函数与自定义异常处理(十三)

一、abort函数 使用abort函数可以立即终止视图函数的执行,并可以返回给前端特定的信息 传递状态码信息,必须是标准的http状态码 abort(403)传递响应体信息 resp Response(“login failed”) abort(resp) from flask import Flask,request,abort,Resp…

Linux开机运行应用程序

1.在/etc/init.d/目录下追加shell脚本 2.追加shell脚本到启动任务 命令:chkconfig --add test 3.修改启动级别 命令:chkconfig --level 2345 test on转载于:https://www.cnblogs.com/hezhixiong/p/5133551.html

LeetCode 2197. 替换数组中的非互质数(栈)

文章目录1. 题目2. 解题1. 题目 给你一个整数数组 nums 。请你对数组执行下述操作: 从 nums 中找出 任意 两个 相邻 的 非互质 数。如果不存在这样的数,终止 这一过程。否则,删除这两个数,并 替换 为它们的 最小公倍数&#xff…

Web框架——Flask系列之json、jsonify模块的使用(十四)

一、字典与json之间的格式转换 json.dumps(字典) :将python的字典转换为json字符串json.loads(字符串) :将字符串转换为python中的字典 from flask import Flask import jsonapp Flask(__name__)app.route("/index",methods["GET&quo…

LeetCode 2195. 向数组中追加 K 个整数(贪心)

文章目录1. 题目2. 解题1. 题目 给你一个整数数组 nums 和一个整数 k 。 请你向 nums 中追加 k 个 未 出现在 nums 中的、互不相同 的 正 整数,并使结果数组的元素和 最小 。 返回追加到 nums 中的 k 个整数之和。 示例 1: 输入:nums [1,…

Web框架——Flask系列之设置和读取cookie(十五)

设置cookie,默认有效期是临时cookie,浏览器关闭就会失效 from flask import Flask,make_responseapp Flask(__name__)app.route("/set_cookie",methods["GET"]) def set_cookie():resp make_response("success")# 设置cookie&#…

Matlab R2010a 32bit 绿色免安装版

迅雷快传:http://kuai.xunlei.com/d/QLjbCAK4GADvnjVRfd2 转载于:https://www.cnblogs.com/enden/p/5134753.html

LeetCode 2200. 找出数组中的所有 K 近邻下标

文章目录1. 题目2. 解题1. 题目 给你一个下标从 0 开始的整数数组 nums 和两个整数 key 和 k 。 K 近邻下标 是 nums 中的一个下标 i &#xff0c;并满足至少存在一个下标 j 使得 |i - j| < k 且 nums[j] key 。 以列表形式返回按 递增顺序 排序的所有 K 近邻下标。 示例…

Web框架——Flask系列之session机制(十六)

一、session机制图解 二、设置和获取session from flask import Flask,sessionapp Flask(__name__)# flask的session需要用到的密钥字符串 app.config["SECRET_KEY"] "Zepppppp"app.route("/login",methods["GET","POST"…

LeetCode 2201. 统计可以提取的工件(哈希)

文章目录1. 题目2. 解题1. 题目 存在一个 n x n 大小、下标从 0 开始的网格&#xff0c;网格中埋着一些工件。给你一个整数 n 和一个下标从 0 开始的二维整数数组 artifacts &#xff0c;artifacts 描述了矩形工件的位置&#xff0c;其中 artifacts[i] [r1i, c1i, r2i, c2i] …

学习大数据看门的几本书

Hadoop实战 Hbase权威指南 深入理解大叔据 Hadoop硬实战 Hadoop应用开发技术详解 Hadoop应用开发实战详解 ElasticSearch 服务器开发 Lucene实战转载于:https://www.cnblogs.com/1130136248wlxk/p/5135822.html

Web框架——Flask系列之请求上下文与应用上下文请求钩子Flask-Script扩展命令行(十七)

一、请求上下文和应用上下文 请求上下文(request context) request和session都属于请求上下文对象。 应用上下文(application context) current_app和g都属于应用上下文对象。 current_app:表示当前运行程序文件的程序实例。 g:处理请求时&#xff0c;用于临时存储的对象&…

LeetCode 2202. K 次操作后最大化顶端元素

文章目录1. 题目2. 解题1. 题目 给你一个下标从 0 开始的整数数组 nums &#xff0c;它表示一个 栈 &#xff0c;其中 nums[0] 是栈顶的元素。 每一次操作中&#xff0c;你可以执行以下操作 之一 &#xff1a; 如果栈非空&#xff0c;那么 删除 栈顶端的元素。如果存在 1 个…

Web框架——Flask系列之宏、继承、包含(十八)

一、宏 类似于python中的函数&#xff0c;宏的作用就是在模板中重复利用代码&#xff0c;避免代码冗余。 Jinja2支持宏&#xff0c;还可以导入宏&#xff0c;需要在多处重复使用的模板代码片段可以写入单独的文件&#xff0c;再包含在所有模板中&#xff0c;以避免重复。 定…

pypinyin 获取多音字的拼音组合

使用 pypinyin 包 import pypinyin from pypinyin import pinyin, lazy_pinyin import itertoolstext 追剧、听音乐 # heteronym 开启多音字选项&#xff0c; NORMAL不带声调 ans list(itertools.product(*pinyin(text, heteronymTrue, stylepypinyin.NORMAL))) print(ans)输…

c++11标准:匿名函数(匿名表达式)lambda

lambda&#xff1a; C11提供了对匿名函数的支持,称为Lambda函数(也叫Lambda表达式). Lambda表达式具体形式如下: 匿名函数定义/匿名表达式声明&#xff1a;[capture](parameters)->return-type{body} 函数调用&#xff1a;function a [capture](parameters)->return-typ…

Web框架——Flask系列之Flask中的特殊变量和方法(十九)

在Flask中&#xff0c;有一些特殊的变量和方法是可以在模板文件中直接访问的。 一、config对象 config 对象就是Flask的config对象&#xff0c;也就是 app.config 对象。 {{ config.SQLALCHEMY_DATABASE_URI }}二、request 对象 就是 Flask 中表示当前请求的 request 对象&am…

数据库和ORMS:使用SQLAlchemy与数据库通信

文章目录1. 环境安装2. 使用SQLAlchemy与SQL数据库通信2.1 创建表2.2 连接数据库2.3 insert、select2.4 update、delete2.5 relationships2.6 用Alembic进行数据库迁移learn from 《Building Data Science Applications with FastAPI》1. 环境安装 docker 安装 MongoDB 服务 d…