const (C# 參考)

您可以使用 const 關鍵字來宣告常數欄位或區域常數。 常數欄位和區域常數不是變數,可能無法修改。 常數可以是數值、布林值、字串或 null 參考。 請勿建立用來表示想隨時變更之資訊的常數。 例如,請勿使用常數欄位來儲存服務的價格、產品版本號碼或公司的品牌名稱。 這些值可能會隨時間變更;此外,由於編譯器會傳播常數,以您的程式庫編譯的其他程式碼必須經過重新編譯,才能看到變更。 另請參閱 readonly 關鍵字。 例如:

const int X = 0;
public const double GravitationalConstant = 6.673e-11;
private const string ProductName = "Visual C#";

從 C# 10 開始,如果使用的所有運算式也是常數字串,差補字串可能是常數。 這項功能可以改善建置常數字串的程式碼:

const string Language = "C#";
const string Platform = ".NET";
const string Version = "10.0";
const string FullProductName = $"{Platform} - Language: {Language} Version: {Version}";

備註

常數宣告的類型指定宣告引入的成員類型。 區域常數或常數欄位的初始設定式必須是可明確轉換成目標型別的常數運算式。

常數運算式是可在編譯時期完整評估的運算式。 因此,參考型別之常數唯一可能的值為字串和 null 參考。

常數宣告可以宣告多個常數,例如:

public const double X = 1.0, Y = 2.0, Z = 3.0;

常數宣告中不允許使用 static 修飾詞。

常數可以參與常數運算式,如下所示:

public const int C1 = 5;
public const int C2 = C1 + 100;

注意

readonly 關鍵字與 const 關鍵字不同。 const 欄位只能在欄位的宣告中初始化。 readonly 欄位可在宣告或建構函式中初始化。 因此,readonly 欄位可能會因使用的建構函式而有不同的值。 此外,雖然 const 欄位是編譯時期常數,但 readonly 欄位可用於執行階段常數,如下列程式碼所示:public static readonly uint l1 = (uint)DateTime.Now.Ticks;

範例

public class ConstTest
{
    class SampleClass
    {
        public int x;
        public int y;
        public const int C1 = 5;
        public const int C2 = C1 + 5;

        public SampleClass(int p1, int p2)
        {
            x = p1;
            y = p2;
        }
    }

    static void Main()
    {
        var mC = new SampleClass(11, 22);
        Console.WriteLine($"x = {mC.x}, y = {mC.y}");
        Console.WriteLine($"C1 = {SampleClass.C1}, C2 = {SampleClass.C2}");
    }
}
/* Output
    x = 11, y = 22
    C1 = 5, C2 = 10
*/

下列範例示範如何宣告區域常數:

public class SealedTest
{
    static void Main()
    {
        const int C = 707;
        Console.WriteLine($"My local constant = {C}");
    }
}
// Output: My local constant = 707

C# 語言規格

如需詳細資訊,請參閱 C# 語言規格的下列幾節:

另請參閱