常數 (C# 程式設計手冊)

常數是在編譯時期已知且不會在程式存留期變更的不可變值。 常數是使用 const 修飾詞所宣告。 有 C# 內建型別才能宣告為 constString 以外的參考型別常數只能使用 null 值初始化。 使用者定義型別 (包括類別、結構和陣列) 不能是 const。 使用 readonly 修飾元來建立在執行階段 (例如在建構函式中) 初始化一次的類別、結構或陣列,因而無法進行變更。

C# 不支援 const 方法、屬性或事件。

enum 類型可讓您定義整數內建類型的具名常數 (例如 intuintlong 等等)。 如需詳細資訊,請參閱 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;
}

常數可以標記為 publicprivateprotectedinternalprotected internalprivate protected。 這些存取修飾詞定義類別使用者如何存取常數。 如需詳細資訊,請參閱存取修飾詞

因為類型之所有執行個體的常數值都會相同,所以常數的存取方式就像它們是 static 欄位一樣。 您未使用 static 關鍵字來宣告它們。 不在定義常數之類別中的運算式必須使用類別名稱、句號以及存取常數的常數名稱。 例如:

int birthstones = Calendar.Months;

C# 語言規格

如需詳細資訊,請參閱<C# 語言規格>。 語言規格是 C# 語法及用法的限定來源。

另請參閱