常數是編譯時期已知的不可變值,不會變更程式生命週期。 常數會以 const 修飾詞宣告。 只有 C# 內建型態 可以宣告為 const
。 以外的 String 參考型別常數只能使用 Null 值初始化。 使用者定義型別,包括類別、結構和陣列,不能是 const
。 使用 只讀 修飾詞來建立類別、結構或陣列,這些只在執行時期(例如在建構函式中)初始化一次,之後便無法變更。
C# 不支援 const
方法、屬性或事件。
列舉類型可讓您定義整數內建型別的具名常數(例如int
、uint
、long
等等)。 如需詳細資訊,請參閱 enum。
常數必須在宣告時初始化。 例如:
class Calendar1
{
public const int Months = 12;
}
在此範例中,常數 Months
一律為 12,即使類別本身也無法變更。 事實上,當編譯程式在 C# 原始程式碼中遇到常數識別碼時(例如 Months
,),它會將常值直接取代為產生的中繼語言 (IL) 程式代碼。 因為運行時間沒有與常數相關聯的變數位址,所以欄位無法以參考方式傳遞,const
而且無法在表達式中作為 l 值使用。
備註
當您參考其他程式代碼中定義的常數值,例如 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
關鍵詞來宣告它們。 不在定義常數之類別中的運算式必須使用類別名稱、句號和常數名稱來存取常數。 例如:
int birthstones = Calendar.Months;
C# 語言規格
如需詳細資訊,請參閱<C# 語言規格>。 語言規格是 C# 語法和使用方式的最終來源。