C#中static、const、readonly與static readonly的區(qū)別與聯(lián)系
1、const修飾符
初始化時(shí)機(jī):編譯時(shí),即編譯程序時(shí)將值已經(jīng)嵌入代碼中;
值狀態(tài):不允許動(dòng)態(tài)修改
修飾范圍:字段、局部變量
主要應(yīng)用場(chǎng)景:主要應(yīng)用于程序運(yùn)行中不需要改變的變量的值,比如數(shù)學(xué)符號(hào)PI;
2、static修飾符
初始化時(shí)機(jī):運(yùn)行時(shí),可以聲明時(shí)賦值,也可以在構(gòu)造函數(shù),或使用時(shí)賦值
值狀態(tài):允許修改
修飾范圍:類、字段、屬性、方法、運(yùn)算符、事件、構(gòu)造函數(shù)(不能用于索引器、析構(gòu)函數(shù)或類以外的類型)
主要應(yīng)用場(chǎng)景:主要作用于類的公共屬性
3、readonly修飾符
初始化時(shí)機(jī):運(yùn)行時(shí),可以聲明時(shí)賦值或在類中的構(gòu)造函數(shù)中賦值
值狀態(tài):允許修改,但只能在構(gòu)造函數(shù)中修改
修飾范圍:字段
主要應(yīng)用場(chǎng)景:主要作用于實(shí)例化的對(duì)象的只讀屬性
4、static readonly修飾符
初始化時(shí)機(jī):運(yùn)行時(shí),是兩個(gè)關(guān)鍵字的組合
值狀態(tài):允許修改,聲明時(shí)賦值或者靜態(tài)構(gòu)造函數(shù)中賦值
修飾范圍:字段
主要應(yīng)用場(chǎng)景:第一,和const相比,它主要應(yīng)用于引用性變量;而const,只能用于string類型的引用性變量;第二,類的只讀公共屬性
?
?總結(jié):
const是靜態(tài)的、編譯期變量,只能在聲明變量的時(shí)候賦值。
readonly是運(yùn)行時(shí)變量,可以在聲明的時(shí)候或在構(gòu)造函數(shù)內(nèi)賦值。
static readonly變量就變成了靜態(tài)的、編譯期變量。只能靜態(tài)構(gòu)造函數(shù)中進(jìn)行初始化。
同時(shí)static readonly可以理解為是最簡(jiǎn)單的一種單例模式實(shí)現(xiàn)方式。
const是靜態(tài)常量,readonly是動(dòng)態(tài)常量.const高效,readonly靈活!但實(shí)際開(kāi)發(fā)中我們經(jīng)常用static readonly 來(lái)代替const, 以平衡const在靈活性上的不足.

