C 關鍵字const與readonly的區別

2022-01-22 09:33:29 字數 1223 閱讀 8708

儘管你寫了很多年的c#的**,但是可能當別人問到你const與readonly的區別時候,還是會小小的愣一會吧~

筆者也是在看歐立奇版的《.net 程式設計師面試寶典》的時候,才發現自己長久以來竟然在弄不清出兩者的情況下,混用了這麼長的時間。的確,const與readonly 很像,都是將變數宣告為唯讀,且在變數初始化後就不可改寫。那麼,const與readonly 這兩個修飾符到底區別在什麼地方呢?其實,這個牽扯出c#語言中兩種不同的常量型別:靜態常量(compile-time constants)和動態常量(runtime constants)。這兩者具有不同的特性,錯誤的使用不僅會損失效率,而且還會造成錯誤。

首先先解釋下什麼是靜態常量以及什麼是動態常量。靜態常量是指編譯器在編譯時候會對常量進行解析,並將常量的值替換成初始化的那個值。而動態常量的值則是在執行的那一刻才獲得的,編譯器編譯期間將其標示為唯讀常量,而不用常量的值代替,這樣動態常量不必在宣告的時候就初始化,而可以延遲到建構函式中初始化。

當你大致了解上面的兩個概念的時候,那麼就可以來說明const與readonly了。const修飾的常量是上述中的第一種,即靜態常量;而readonly則是第二種,即動態常量。那麼區別可以通過靜態常量與動態常量的特性來說明:

1)const修飾的常量在宣告的時候必須初始化;readonly修飾的常量則可以延遲到建構函式初始化

2)const修飾的常量在編譯期間就被解析,即常量值被替換成初始化的值;readonly修飾的常量則延遲到執行的時候

此外const常量既可以宣告在類中也可以在函式體內,但是static readonly常量只能宣告在類中。

class

program

public

class

test

,b is

", a, b);

//a is 0,b is 10

console.writeline("

a1 is ,b1 is

", a1, b1);

//a1 is 10,b1 is 100

console.writeline(

"c is ,d is

", c, d);

//c is 100,d is 10

console.writeline("

c1 is ,d1 is

", c1, d1);

//c is 10,d is 100

} }

}

C 指標與const關鍵字

在c 中,我們經常使用const關鍵字來定義常量,這是const的基礎用法。然而,當const與指標變數結合起來時,情況就會變得稍稍複雜,下面講解const與指標變數結合的三種形式。const關鍵字在指標型別之前定義,我們稱這種情況為常量指標,形式如下 int a 10,b 20 const int...

const關鍵字與指標

1 const修飾指標的四種形式 a.const是關鍵字,在c語言中原來修飾變數,表示這個變數是常量。const int inum 10 和 int const inum 10 的效果是一樣的。b.const修飾指標有4種形式。區分清楚這4種即可全部理解const和指標。1 const int p ...

const關鍵字與指標

const關鍵字與指標 const修飾指標的4種形式 1 const.關鍵字,在c語言中用來修飾變數,表示這個變數是常量。2 const修飾指標有4種形式,區分清楚這4種即可全部理解const和指標。第一種 const int p 第二種 int const p 第三種 int const p 第四...