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是指所修飾的成員與類型有關,而與對象無關。

   靜態字段和靜態構造方法,一般適用於於一些不會常常變化而又頻繁使用的數據,好比鏈接字符串,配置信息等,進行一次讀取,之後就能夠方便的使用了,同時也節約了託管資源,由於對於靜態成員,一個靜態字段只標識一個存儲位置。

   非靜態方法能夠訪問類中的任何成員,靜態方法只能訪問類中的靜態成員。

相關文章
相關標籤/搜索