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的含義,所以 也...