const 的概念就是乙個包含不能修改的值的變數。
常數表示式是在編譯時可被完khrxc全計算的表示式。因此不能從乙個變數中提取的值來初始化常量。
如果 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。www.cppcns.com
readonly可以是任何型別
* 需要注意的乙個問題是:
對於乙個 readonly 的 reference 型別,只是被限定不能進行賦值(寫)操作而已。而對其成員的讀寫仍然是不受限制的。
複製** **如下:
public static readonly class1 my = new class1();
…my.somepro = 10;//正常
my = new class1(); //出錯,該物件是只程式設計客棧讀的
但是,如果上例中的 class1 不是乙個 khrxcclass 而是乙個 struct,那麼後面的兩個語句就都會出錯。
static readonly:
j**a 中 static 是當載入乙個類時執行一次的。
c#中是怎麼執行的,我沒有查到。很奇怪幾乎每本j**a的書都會說static的問題,c#的往往只說怎麼用,但是應該是在main函式呼叫之前初始化,所以static readonly也是執行時的,可以用變數付值,如:
private static readonly string path = system.windows.forms.application.startuppath + 「aaa」;
本文標題: c#中 const 和 readonly 的不同
本文位址:
C 中頂層const和底層const
指標本身是乙個物件,由於,指標實際相應著記憶體單元的一段儲存空間,然而,指標所指向的也是乙個資料物件,因此,指標是乙個常量與指標所指向的是乙個常量是兩個全然不同的概念,頂層 const 表示的是 指標本身是乙個常量,底層 const 表示的是 指標所指的物件是乙個常量,更普通情況下,頂層 const...
C 中頂層const和底層const
頂層const表示指標本身是個常量,底層const表示指標所指的物件是乙個常量。int i 0 int const p1 i 不能改變p的值,p是乙個指標,所以p是乙個頂層const const int p2 i 表示不能改變指標所指i的值,所以是乙個底層const const的頂層和底層不只是限定...
c 中const和引用
c 和c語言裡面的const 1 在c語言裡面的const修飾的量是乙個常變數,不能作為左值,但是可以通過洩露指標和引用去修改它,int a 10 int p a 洩露了常量的引用。但是 int a 10 const int p a 是正確的。因為a本來就是普通的變數,而通過常量 p不能改變它,但a...