開門見山的說,他們是不同型別的常量
一,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...