1. 程式人生 > 其它 >【C# 基礎概念】靜態常量和動態常量的區別

【C# 基礎概念】靜態常量和動態常量的區別

C# 靜態常量和動態常量的區別

C#中有兩種常量型別,分別為readonly(執行時常量)與const(編譯時常量),本文將就這兩種型別的不同特性進行比較並說明各自的適用場景。

工作原理
readonly為執行時常量,程式執行時進行賦值,賦值完成後便無法更改,因此也有人稱其為只讀變數。
const為編譯時常量,程式編譯時將對常量值進行解析,並將所有常量引用替換為相應值。
宣告及初始化
readonly常量只能宣告為類欄位,支援例項型別或靜態型別,可以在宣告的同時初始化或者在建構函式中進行初始化,初始化完成後便無法更改。
const常量除了可以宣告為類欄位之外,還可以宣告為方法中的區域性常量,預設為靜態型別(無需用static修飾,否則將導致編譯錯誤),但必須在宣告的同時完成初始化。
資料型別支援


由於const常量在編譯時將被替換為字面量,使得其取值型別受到了一定限制。const常量只能被賦予數字(整數、浮點數)、字串以及列舉型別。下面的程式碼無法通過編譯:
public const DateTime D = DateTime.MinValue;
改成readonly就可以正常編譯:
public readonly DateTime D = DateTime.MinValue;
效能比較
const直接以字面量形式參與運算,效能要略高於readonly,但對於一般應用而言,這種效能上的差別可以說是微乎其微。

程式設計是個人愛好