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性能,所带来的程序集引用不一致问题;

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

最新文章

  1. js判断用户是否正在滚动滚动条,滚动条滚动是否停止
  2. 【web前端学习部落22群】分享 碰撞的小球开源小案例
  3. 【POI xls】解析xls遇到的问题
  4. linux 多线程 LinuxThreads(转)
  5. 我的android学习经历30
  6. mysql 连接丢失错误解决(转载)
  7. delphi 反射(原理)
  8. bzoj3876
  9. SHell命令总结
  10. Python开发【第十篇】:CSS --无内容点击-不进去(一)
  11. 几项有用的JQUERY代码
  12. Nagios显示器MySQL一个错误:NRPE: Unable to read output具体的解决过程
  13. MTK平台Android项目APK预置方案
  14. ABP框架实战 1.基础信息维护
  15. Siamese Network理解
  16. 小米官网的css3导航菜单
  17. Generator的正确打开方式
  18. ftp权限设置大全!!!
  19. Tomcat发生java.lang.OutOfMemoryError: PermGen space的解决方案
  20. 「雅礼集训 2017 Day2」水箱

热门文章

  1. 【bzoj2502】清理雪道
  2. Windows下zookeeper安装及配置
  3. CG-CTF | 密码重置2
  4. 北风设计模式课程---单一职责原则(Single Responsibility Principle)
  5. netflow-module
  6. 查看Oracle数据库中的执行计划
  7. easyui表格适应bootstrap
  8. 自定义控件 - 流式布局:TagFlowLayout
  9. 十八、浏览器不能打开jenkins报告,报错Opening Robot Framework report failed
  10. 用Vue来实现音乐播放器(十六):滚动列表的实现