建議6 區別readonly和const的使用方法

2021-09-25 23:17:27 字數 1051 閱讀 1004

很多初學者分不清這兩者的使用場合。在我看來,要使用const的理由只有乙個,那就是效率。但是,大部分情況下,效率並沒有那麼高的地位,所以我更願意採用readonly,因為readonly賦予**更多的靈活性。它們的本質區別如下:

1、const是應該編譯期常量,readonly是乙個執行時常量。

2、const只能修飾基元型別、列舉型別或字串型別,所以它天然就是static的,不能手動增加乙個static修飾符。

而之所以說const變數的效率高,是因為經過編譯器編譯後,我們在**中引用const變數的地方會用const變數所對應的實際值來代替,如:

const int constvalue=100;

console.writeline(constvale);

和下面的**生成的il**一樣:

console.writeline(100);

readonly變數是執行時變數,其賦值行為發生在執行時。readonly的全部意義在於,它在執行時第一次被賦值後就不可以改變,當然,「不可以改變」分為兩層意思:

1、對於值型別變數,值本身不可改變

2、對於引用型別變數,引用本身(相對於指標)不可改變

注意:引用型別本身不可變,引用所指的例項的值,卻是可以改變的。

class sample

}readdonly 所代表的執行時含義有乙個重要的作用,就是可以為每個類例項指定乙個

readonly的變數,以sample為例,可以在執行時生成多個例項,而同時,又可以為

每個例項生成自己的readonly變數,如下:

sample sample1=new sample(100);

sample sample2=new sample(200);

這就是readonly變數所代表的執行時含義,也就是它靈活的地方。

注意:readonly變數可以在宣告的時候賦值,然後可以在建構函式裡面進行修改,也可以不在宣告的時候不賦值,直接建構函式裡面賦值。所以,實際上,應該把初始化器理解成構造方法的一部分,它其實是乙個語法糖。在構造方法內,我們確實可以多次對readonly賦值。

建議6 區別readonly和const的使用方法

區別 const是乙個編譯期常量,readonly是乙個執行時常量。const只能修飾基元型別,列舉型別和字串型別,readonly沒有限制。const變數的效率高,是因為經過編譯器編譯後,我們在 中引用const變數的地方都會用const變數所對應的實際值來代替 const int constva...

c和c 的一點區別

1 c和c 的標頭檔案不同 c的標頭檔案 include c 的標頭檔案 include 2 輸入輸出不同 輸入 int i 10 c scanf d i 需要注意輸入的變數型別 c cin i 不需要注意變數型別 輸出 c printf d n i 需要注意輸出的變數型別 c cout 3 變數的...

C和C 的一點小區別

編譯時不能確定的值不要放在全域性局域初始初始化,否則c編譯器會報警告或者錯誤 報錯情況 include includeint add int a int b const int c add 1,2 編譯時不能確定值 int main 以上編譯時候會報錯 root localhost samba sh...