const和readonly的區別

2021-10-22 07:24:57 字數 870 閱讀 2458

const和readonly的區別

const是靜態常量,const是編譯時常量;readonly是動態常量,是執行時常量,const較高效,readonly較靈活。

1.const預設是靜態的,只能由型別來訪問,不能與static同時使用;readonly預設是非靜態的,由例項物件來訪問,可以顯示使用static定義為靜態成員;

2.const只能應用在值型別和string型別上,其他引用型別常量只能定義為null,否則以new為const引用型別常量賦值,;readonly唯讀字段,可以使任意型別,但是對於引用型別字段來說,readonly不能限制對該物件例項成員的讀寫控制;編譯器會引發「只能用null對引用型別(字串除外)的常量進行初始化「的錯誤提示;

3.const必須在字段宣告時初始化;readonly可以再宣告時,或者建構函式中進行初始化,不同的建構函式可以為readonly常量實現不同的初始值;

4.const可以定義欄位和區域性變數;而readonly則只能定義字段;static readonly的初始化,必須在定義時,或者靜態無參建構函式中進行;

//宣告字段

private const string name=「sssss」;

private readonly int age=24;

private static readonly string name=「ssssss」;

//宣告區域性變數

public void test()

const string name="ddddddd";
5.陣列和結構體不能被宣告為const常量,string型別可以被宣告為常量,因為string型別的字串恆定特性,使得string的值具有唯讀特性;

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...