C中用const修飾的變數和用static readonl

2021-03-22 03:06:49 字數 5270 閱讀 9988

1樓:匿名使用者

const

用 const 修飾

符宣告的成員叫常量,是在編譯期初始化並嵌入到客戶端程式

static readonly

用 static readonly 修飾符宣告的成員依然是變數,只不過具有和常量類似的使用方法:通過類進行訪問、初始化後不可以修改。但與常量不同的是這種變數是在執行期初始化

示例:測試類:

[執行**] [複製到剪貼簿] [ ± ]code:

using system;

using system.collections.generic;

using system.text;

namespace example02lib

}客戶端**:

[執行**] [複製到剪貼簿] [ ± ]code:

using system;

using system.collections.generic;

using system.text;

using example02lib;

namespace example02

", class1.strconst);

console.writeline("strstaticreadonly : ", class1.strstaticreadonly);

console.readline();}}

}結果:

strconst : const

strstaticreadonly : staticreadonly

修改後的示例:

測試類:

[執行**] [複製到剪貼簿] [ ± ]code:

using system;

using system.collections.generic;

using system.text;

namespace example02lib}結果

strconst : const

strstaticreadonly : staticreadonly changed

2樓:匿名使用者

const和static readonly的確很像:通過類名而不是物件名進行訪問,在程式中只讀等等。在多數情況下可以混用。

二者本質的區別在於,const的值是在編譯期間確定的,因此只能在宣告時通過常量表示式指定其值。而static readonly是在執行時計算出其值的,所以還可以通過靜態建構函式來賦值。

明白了這個本質區別,我們就不難看出下面的語句中static readonly和const能否互換了:

1. static readonly myclass myins = new myclass();

2. static readonly myclass myins = null;

3. static readonly a = b * 20;

static readonly b = 10;

4. static readonly int constintarray = new int ;

5. void somefunction()

1:不可以換成const。new操作符是需要執行建構函式的,所以無法在編譯期間確定

2:可以換成const。我們也看到,reference型別的常量(除了string)只能是null。

3:可以換成const。我們可以在編譯期間很明確的說,a等於200。

4:不可以換成const。道理和1是一樣的,雖然看起來1,2,3的陣列的確就是一個常量。

5:不可以換成readonly,readonly只能用來修飾類的field,不能修飾區域性變數,也不能修飾property等其他類成員。

因此,對於那些本質上應該是常量,但是卻無法使用const來宣告的地方,可以使用static readonly。例如c#規範中給出的例子:

public class color

}static readonly需要注意的一個問題是,對於一個static readonly的reference型別,只是被限定不能進行賦值(寫)操作而已。而對其成員的讀寫仍然是不受限制的。

public static readonly myclass myins = new myclass();

…myins.someproperty = 10; //正常

myins = new myclass(); //出錯,該物件是隻讀的

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

c# const和static readonly有什麼區別?

3樓:匿名使用者

定義一個 全域性靜態只讀型color物件white並用建構函式進行初始化,這應該好懂吧

靜態的作用是始終保持其存在,再下次呼叫時保持上一次的結果。

4樓:匿名使用者

const 常量 在程式中這個值是不變化的

static 靜態變數 作用是始終保持其存在,再下次呼叫時保持上一次的結果。

readonly 是隻讀,不可修改的變數

c#中static和const有什麼區別?

5樓:和屋昂黃

static 是靜態的修飾符,const是定義常量的修飾符;

const就是隻讀的意思,只在宣告中使用;

static一般有2個作用,規定作用域和儲存方式。對於區域性變數,static規定其為靜態儲存方式,每次呼叫的初始值為上一次呼叫的值,呼叫結束後儲存空間不釋放;

對於全域性變數,如果以檔案劃分作用域的話。此變數只在當前檔案可見;

對於static函式也是在當前模組內函式可見。

static為靜態修飾符,可以放在物件前面(函式也是一種物件)如:

class example}

可直接example.show();去呼叫這個方法而不用例項化

當然也可以定義靜態的屬性:

public static string str="hello";

但如果這樣example.str="helloworld";就出現問題了

也就是客戶端可以在任何地方去改變str的值。這樣的話極容易產生錯誤,因為str的值是依靠

example類的,隨時可以改變。比如再宣告一個類:

class class1

}class example

}要防止str值發生改變,就需要用到const修飾符

public const string str="hello";//str被稱為常量

這是如果再對example.str賦值,則編譯器將產生錯誤

用常量來儲存公共資料是最為合適的。

6樓:百度使用者

們都知道,const和static readonly的確很像:通過類名而不是物件名進行訪問,在程式中只讀等等。在多數情況下可以混用。

二者本質的區別在於,const的值是在編譯期間確定的,因此只能在宣告時通過常量表示式指定其值。而static readonly是在執行時計算出其值的,所以還可以通過靜態建構函式來賦值。

明白了這個本質區別,我們就不難看出下面的語句中static readonly和const能否互換了:

1. static readonly myclass myins = new myclass();

2. static readonly myclass myins = null;

3. static readonly a = b * 20;

static readonly b = 10;

4. static readonly int constintarray = new int ;

5. void somefunction()

1:不可以換成const。new操作符是需要執行建構函式的,所以無法在編譯期間確定

2:可以換成const。我們也看到,reference型別的常量(除了string)只能是null。

3:可以換成const。我們可以在編譯期間很明確的說,a等於200。

4:不可以換成const。道理和1是一樣的,雖然看起來1,2,3的陣列的確就是一個常量。

5:不可以換成readonly,readonly只能用來修飾類的field,不能修飾區域性變數,也不能修飾property等其他類成員。

c#中的const何readonly關鍵字含義和作用有什麼區別?

7樓:匿名使用者

const 一個包含不能修改的值的變數。

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

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

如果 const int a = b+1;b是一個變數,顯然不能再編譯時就計算出結果,所以常量是不可以用變數來初始化的。

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

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

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

1. const 欄位只能在該欄位的宣告中初始化。

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

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

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

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

readonly可以是任何型別

總結const只能在初期就使用常量初始化好。對於每一次編譯後的結果,const的值是固定的,而readonly的值是可以在執行的時候才確定值的~~

8樓:匿名使用者

const 關鍵字用於修改欄位或區域性變數的宣告。 它指定欄位或區域性變數的值是常數,不能被修改。不允許在常數宣告中使用 static 修飾符。 const int x = 0;

readonly 關鍵字是可以在欄位上使用的修飾符。當欄位宣告包括 readonly 修飾符時,該宣告引入的欄位賦值只能作為宣告的一部分出現,或者出現在同一類的建構函式中

readonly 關鍵字與 const 關鍵字不同。const 欄位只能在該欄位的宣告中初始化。readonly 欄位可以在宣告或建構函式中初始化。

因此,根據所使用的建構函式,readonly 欄位可能具有不同的值。另外,const 欄位為編譯時常數,而 readonly 欄位可用於執行時常數

請問C語言中的定義變數和整型是什麼意思

c中資料分為變數和常量.在程式設計時,變數必須先定義.對於初學階段通常使用整型變數 大多為十進位制 例如,int a 10 定義十進位制整型變數a,並給它負值10.變數,顧名思義是變化的.如果接下來程式中出現a 10,則a的值就變為20.c就是入門不易,慢慢堅持就沒問題的.定義變數 就是定義一個不定...

判斷題 C語言中字元型的指標變數和實型的指標變數所佔用的空間

所有指標變數佔用4個位元組,用於儲存起始地址與空間量,2位元組儲存起始地址,2位元組儲存指向資料所使用空間量。所以字元型指標和實型指標的空間使用量是一樣的,都是4位元組。正確指標在c裡代表的是實際的地址的開始位元組 一個計算機裡的地址描述位數是相同的 所以這是正確的 判斷題 c語言中字元型的指標變數...

在E mail的地址中,使用者名稱和域名之間用什麼分割

e mail的地址中使用者名稱和域名之間用符號 分割。符號在英文中曾含有兩種意思,即 在 或 單價 它的前一種意思是因其發音類似於英文at,於是常被作為 在 的代名詞來使用。如 明天早晨在學校等 的英文便條就成了 waityou schoolmorning 除了at外,它又有each的含義,所以 也...