定数 (C# プログラミング ガイド)

定数とは、コンパイル時に既知であり、プログラムの実行期間を通じて変更されない値です。 定数を宣言するには、const 修飾子を使用します。 const として宣言できるのは、C# 組み込み型のみです。 String 以外の参照型定数は、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 internal または private protected としてマークできます。 これらのアクセス修飾子により、クラスのユーザーが定数にアクセスする方法が定義されます。 詳細については、「アクセス修飾子」を参照してください。

定数の値は型のすべてのインスタンスで同じであるため、定数は静的フィールドのようにアクセスされます。 定数の宣言に static キーワードは使用しません。 定数を定義しているクラスに含まれていない式で定数を使用する場合は、クラス名、ピリオド、定数の名前を使用する必要があります。 次に例を示します。

int birthstones = Calendar.Months;

C# 言語仕様

詳細については、「C# 言語の仕様」を参照してください。 言語仕様は、C# の構文と使用法に関する信頼性のある情報源です。

関連項目