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是指所修饰的成员与类型有关,而与对象无关。

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

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