zoukankan      html  css  js  c++  java
  • 总结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性能,所带来的程序集引用不一致问题; 

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

  • 相关阅读:
    Discuz X 2.5 点点(伪静态)
    jq 、xml 省市级联动
    php memcache 初级使用(2)
    关于windows虚拟内存管理的页目录自映射
    SharePoint 2010 网络上的开发经验和资源
    SharePoint 2010 Reporting Services 报表服务器正在内置 NT AUTHORITY\SYSTEM 账户下运行 解决方法
    SharePoint 2010 Reporting Services 报表服务器无法解密用于访问报表服务器数据库中的敏感数据或加密数据的对称密钥 解决方法
    Active Directory Rights Management Services (AD RMS)无法检索证书层次结构。 解决方法
    SharePoint 2010 Reporting Services 报表服务器实例没有正确配置 解决方法
    SharePoint 2010 页面引用 Reporting Services 展现 List 报表
  • 原文地址:https://www.cnblogs.com/cqpass/p/3280580.html
Copyright © 2011-2022 走看看