Const和readonly的比較

2022-03-31 12:08:38 字數 901 閱讀 5173

開門見山的說,他們是不同型別的常量

一,const是編譯時常量,意思就是編譯的時候const宣告的物件值就已經確定了,如果這以後改了值不編譯的話值還是原來的值

說的有點拗口,看**

const int b = 6;//編譯,

然後你改成

const int b = 8;//不編譯

這時候其實b=6; 

這個就是const編譯時常量的意思

很顯然,readonly是執行時常量

static readonly int a = 9; 

只要在執行之前改了a的值,a的值就是你最後一次改的值 

二,const必須在宣告的時候賦值

const  int f;

這樣的**是無法通過編譯的

const int f=8;//賦初始值才可以

readonly不一定要宣告時候賦值,當然可以在宣告的同事初始化,或者在建構函式時候初始化 

readonly int g; 

readonly int g=6;

以上兩種宣告寫法都可以

三,資料型別支援

const支援的資料型別較少,只支援數字,字串,列舉型別

const   datetime e = datetime.now;

上面這行**無法通過編譯

readonly datetime e = datetime.now;

上面這種**沒問題,readonly支援任何型別

四,效能比較

const略佔優勢,從編譯時還是執行時就可以知道 

其實,也是微乎其微的優勢

一般取值永久不變的時候,例如圓周率可以宣告位 const double  h = 3.14; 

最後,我的小建議,如果實在搞不清楚二者的區別,我建議你就用readonly吧! 

const 和 readonly 的區別

const 和 readonly 的區別,總是不太清楚,於是查了查資料。const 的概念就是乙個包含不能修改的值的變數。常數表示式是在編譯時可被完全計算的表示式。因此不能從乙個變數中提取的值來初始化常量。如果 const int a b 1 b是乙個變數,顯然不能再編譯時就計算出結果,所以常量是不...

readonly 和const的區別

const 的概念就是乙個包含不能修改的值的變數。常數表示式是在編譯時可被完全計算的表示式。因此不能從乙個變數中提取的值來初始化常量。如果 const int a b 1 b是乙個變數,顯然不能再編譯時就計算出結果,所以常量是不可以用變數來初始化的。readonly 允許把乙個字段設定成常量,但可以...

Const和ReadOnly的區別

1.const 和readonly 都是用來表示常量的。2.初始化賦值不同 a const 必須在宣告的時候即賦值。b readonly 可以在初始化的過程中賦值。在其他地方賦值,編譯器會報錯。因此,根據所使用的建構函式,readonly 字段可以具有不同的值。3.const 是編譯時常數,而 re...