常數 (C# 程式設計手冊)
常數是在編譯時期已知且不會在程式存留期變更的不可變值。 常數是使用 const 修飾詞所宣告。 有 C# 內建型別才能宣告為 const
。 String 以外的參考型別常數只能使用 null 值初始化。 使用者定義型別 (包括類別、結構和陣列) 不能是 const
。 使用 readonly 修飾元來建立在執行階段 (例如在建構函式中) 初始化一次的類別、結構或陣列,因而無法進行變更。
C# 不支援 const
方法、屬性或事件。
enum 類型可讓您定義整數內建類型的具名常數 (例如 int
、uint
、long
等等)。 如需詳細資訊,請參閱 enum。
常數必須在宣告時進行初始化。 例如:
class Calendar1
{
public const int Months = 12;
}
在此範例中,Months
常數一律為 12,而且甚至類別本身也不能進行變更。 事實上,編譯器在 C# 原始程式碼中遇到常數識別碼 (例如 Months
) 時,會直接將常值替代為它所產生的中繼語言 (IL) 程式碼。 因為在執行階段沒有與常數相關聯的變數位址,所以無法以傳址方式傳遞 const
欄位,而且無法顯示為運算式中的左值。
注意
當您參照其他程式碼中所定義的常數值 (例如 DLL) 時,請小心。 如果新版本的 DLL 定義常數的新值,則除非對新版本重新編譯新值,否則您的程式仍會保留舊常值。
可以同時宣告相同類型的多個常數,例如︰
class Calendar2
{
public const int Months = 12, Weeks = 52, Days = 365;
}
如果用來初始化常數的運算式未建立循環參考,則可以參照另一個常數。 例如:
class Calendar3
{
public const int Months = 12;
public const int Weeks = 52;
public const int Days = 365;
public const double DaysPerWeek = (double) Days / (double) Weeks;
public const double DaysPerMonth = (double) Days / (double) Months;
}
常數可以標記為 public、private、protected、internal、protected internal 或 private protected。 這些存取修飾詞定義類別使用者如何存取常數。 如需詳細資訊,請參閱存取修飾詞。
因為類型之所有執行個體的常數值都會相同,所以常數的存取方式就像它們是 static 欄位一樣。 您未使用 static
關鍵字來宣告它們。 不在定義常數之類別中的運算式必須使用類別名稱、句號以及存取常數的常數名稱。 例如:
int birthstones = Calendar.Months;
C# 語言規格
如需詳細資訊,請參閱<C# 語言規格>。 語言規格是 C# 語法及用法的限定來源。
另請參閱
- 屬性
- 類型
- readonly
- Immutability in C# Part One: Kinds of Immutability (C# 中不變性第一部分:不變性類型)