总结const、readonly、static三者的区别

const:静态常量,也称编译时常量(compile-time constants),属于类型级,通过类名直接访问,被所有对象共享!

  a、叫编译时常量的原因是它编译时会将其替换为所对应的值;

  b、静态常量在速度上会稍稍快一些,但是灵活性却比动态常量差一些;

  c、静态常量,隐式是静态的,即被static隐式修饰过,不能再用static重复修饰,

  d、在声明时初始化;

  e、静态常量只能被声明为简单的数据类型(内建的int和浮点型)、枚举或字符串。

  f、应用场合例如:Math.PI的定义(要声明一些从不改变且处处唯一的常量,就应该使用静态常量)

readonly:动态常量,也称运行时常量(runtime constants),属于对象级,通过对象访问。

  a、而动态常量的值是在运行时获得的;

  b、动态常量在性能上稍差一点,但是灵活性好比前者好;

  c、readonly可以被static修饰,这时的static readonly和const非常相似;

  d、在声明是初始化,在构造函数里初始化;(static readonly常量,如果在构造函数内指定初始值,则必须是静态无参构造函数;)

  e、动态常量可以是任意的数据类型。

  f、应用场合例如:SqlHelper类的连接字符串定义

二者最大的差别在于:静态常量在编译时会将其换为对应的值,这就意味着对于不同的程序集来说,当你改变静态常量的时候需要将其重新编译,否则常量的值不会发生变化,可能引发潜在的问题,而动态常量就不会有这种情况,此时推荐使用static readonly,因为其是运行时赋值,当常量值被更改,运行时也随之更改。

static:本不应该把static与前两者放在一起区别对待的,但是static经常和它们搅在一起,所有这里特别把它拿来说个事。static的意义与const和readonly迥然不同,static是指所修饰的成员与类型有关,而与对象无关。

   静态字段和静态构造方法,通常适用于于一些不会经常变化而又频繁使用的数据,比如连接字符串,配置信息等,进行一次读取,以后就可以方便的使用了,同时也节约了托管资源,因为对于静态成员,一个静态字段只标识一个存储位置。

   非静态方法可以访问类中的任何成员,静态方法只能访问类中的静态成员。

总结:const是编译时常量,readonly是运行时常量;cosnt较高效,readonly较灵活。在应用上以static readonly代替const,以平衡const在灵活性上的不足,同时克服编译器优化cosnt性能,所带来的程序集引用不一致问题;

  本来想好好写一篇总结的,但是看了很多文章才发现水很深,有很多要注意的地方,不是这里三言两语就能说明白的。还要好好的积淀才能悟出它们的核心的区别的地方,把它们从本质上区分开来。

转载于:https://www.cnblogs.com/guzhengtao/p/20190614-1815.html

总结const、readonly、static三者的区别【收藏、转载】20190614相关推荐

  1. C# 总结const、 readonly、 static三者区别:

    总结const. readonly. static三者区别: (有人问我,看似简单,我也没能立刻回答出来,总结一下,分享一下.) const:静态常量,也称编译时常量(compile-time con ...

  2. const和static readonly 区别

    我们都知道,const和static readonly的确很像:通过类名而不是对象名进行访问,在程序中只读等等. 在多数情况下可以混用. 二者本质的区别在于,const的值是在编译期间确定的,因此只能 ...

  3. C#中const和static readonly 的区别

    我们都知道,const和static readonly的确很像:通过类名而不是对象名进行访问,在程序中只读等等.在多数情况下可以混用. 二者本质的区别在于,const的值是在编译期间确定的,因此只能在 ...

  4. const 与 static readonly 的区别

    来作个例子吧: 先创建一个类库ClassLibrary1.dll using System; namespace ClassLibrary1 {     /// <summary>     ...

  5. C++ const关键字的总结(全局/局部变量、修饰指针和引用、成员函数和数据成员、修饰类对象、const与宏定义的区别、Static与Const的区别)

    const关键字 const关键字 1.什么是const 2.使用原理 2.1.const全局/局部变量 2.2.cosnt修饰指针和引用 2.3.const修饰函数参数 2.4.const修饰函数返 ...

  6. C# const与readonly的用法和区别解析(转)

    总结一下const和readonly: 1.const和readonly的值一旦初始化则都不再可以改写: 2.const只能在声明时初始化:readonly既可以在声明时初始化也可以在构造器中初始化: ...

  7. php中const和static的区别和联系

    1.const是类中的常量,类外用define来定义常量 2.const只可以修饰类的属性,不能修饰类的方法,static可以修饰属性,也可以修饰方法 3.const和static都属于类本身,而不属 ...

  8. 【Java面试30天掌握】基础篇Day02(数据类型/变量、break、contiune、return三者的区别?)

    这是一个Java面试的集合文档,将会周期性的进行更新,您完全将其看成一个番剧,追番的感觉可能会让您更有学习的兴趣. 此篇为基础语法篇 Java的基本数据类型有哪些? 数据类型 boolean byte ...

  9. const、static、内部链接属性和外部链接属性整理

    2019独角兽企业重金招聘Python工程师标准>>> 说起const.static.以及#define大家都知道,我一直以为我也是知道的,昨天一同学说他面试时被问到#define定 ...

最新文章

  1. 题目1204:农夫、羊、菜和狼的故事
  2. Windows + Eclipse + Gtk 环境(总结)
  3. leetcode538. 把二叉搜索树转换为累加树
  4. facebook, twitter,QQ, google +1, linkedin, disqus,gigya 按钮Network (登录)
  5. 力扣-543. 二叉树的直径
  6. java. base关键字_C#基础知识之base关键字介绍
  7. 开源爬虫框架各有什么优缺点?
  8. centos分区方案
  9. Guice 的工作原理
  10. 弘辽科技:淘宝开店类别怎么选择?淘宝开店如何选类目?
  11. 这知道这个错误是咋回事啊?
  12. Andriod.mk用法
  13. 前端规范之Git工作流规范 Husky + lint-staged
  14. 如何选择APP内测分发平台?五年开发者亲述
  15. 剪切后的文件可以恢复吗?恢复剪切文件怎么办?
  16. 什么是浏览器指纹? 浏览器指纹技术应用有哪些?
  17. QQ群非管理员@所有人的方法
  18. 1+X Web前端证书中级备考攻略
  19. IE调试网页之六:使用 F12 开发人员工具调试 HTML 和 CSS (Windows)
  20. Eclipse新建一个Spring项目(最基础)

热门文章

  1. 数字IC设计流程总结
  2. 菜鸟学SQLServer--恢复模式
  3. 你知道 ES6~ES12等叫法是怎么来的吗?
  4. 初识二进制2:指令系统
  5. 删除MSSQL数据库text字段中恶意脚本Script=***.js/script的方法
  6. c语言贪吃蛇源代码window32,Win32贪吃蛇源代码。背景非常简单
  7. ArcGIS Pro 简明教程(2)基础操作和简单制图
  8. C#将DataTable海量数据导出到Excel
  9. 史玉柱:我是怎么做游戏策划的
  10. matlab 连通域数量,【Matlab】找到矩阵中每个连通域的最小值