const 和 readonly 的區別

2021-04-12 22:02:14 字數 1032 閱讀 7033

const 和

readonly 的區別,總是不太清楚,於是查了查資料。

const 的概念就是乙個包含不能修改的值的變數。

常數表示式是在編譯時可被完全計算的表示式。因此不能從乙個變數中提取的值來初始化常量。

如果 const int a = b+1;

b是乙個變數,顯然不能再編譯時就計算出結果,所以常量是不可以用變數來初始化的。

readonly 允許把乙個字段設定成常量,但可以執行一些運算,可以確定它的初始值。

因為 readonly 是在計算時執行的,當然它可以用某些變數初始化。

readonly 是例項成員,所以不同的例項可以有不同的常量值,這使readonly更靈活。

readonly 關鍵字與 const 關鍵字不同。

1. const 字段只能在該字段的宣告中初始化。

readonly 字段可以在宣告或建構函式中初始化。因此,根據所使用的建構函式,readonly 字段可能具有不同的值。

2. const 欄位是編譯時常數,而 readonly 欄位可用於執行時常數。

3. const 預設就是靜態的,而 readonly 如果設定成靜態的就必須顯示宣告。

4.const 對於引用型別的常數,可能的值只能是 string 和 null。

readonly可以是任何型別

*需要注意的乙個問題是:

對於乙個 readonly 的 reference 型別,只是被限定不能進行賦值(寫)操作而已。而對其成員的讀寫仍然是不受限制的。

public static readonly class1 my = new class1();

…my.someproperty = 10;

//正常

my = new class1(); //出錯,該物件是唯讀的

但是,如果上例中的 class1 不是乙個 class 而是乙個 struct,那麼後面的兩個語句就都會出錯。

static readonly

readonly 和const的區別

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

Const和ReadOnly的區別

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

const和readonly的區別

這同樣是乙個面試的基礎題。可以看看學習下哦 readonly關鍵字與const關鍵字的區別 1 const字段只能在該字段的宣告中初始化。readonly字段可以在宣告或建構函式中初始化。因此,根據所使用的建構函式,readonly字段可能具有不同的值。2 const欄位是編譯時常數,而readon...