zoukankan      html  css  js  c++  java
  • C# 总结const、 readonly、 static三者区别:

    总结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,因为其是运行时赋值,当常量值被更改,运行时也随之更改。

    const和static readonly的确很像:通过类名而不是对象名进行访问,在程序中只读等等。在多数情况下可以混用。二者本质的区别在于,const的值是在编译期间确定的,因此只能在声明时通过常量表达式指定其值。而static readonly是在运行时计算出其值的,所以还可以通过静态构造函数来赋值。

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

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

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

  • 相关阅读:
    PHP编译安装
    PHP编译安装
    Apache编译安装
    Apache编译安装
    端口号
    端口号
    初步理解TCP/IP网络
    初步理解TCP/IP网络
    剑指offer——树的子结构
    STL四种智能指针
  • 原文地址:https://www.cnblogs.com/IamJiangXiaoKun/p/5726726.html
Copyright © 2011-2022 走看看