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

定数とは、コンパイル時に既知であり、プログラムの実行期間を通じて変更されない値です。Constants are immutable values which are known at compile time and do not change for the life of the program. 定数を宣言するには、const 修飾子を使用します。Constants are declared with the const modifier. const として宣言できるのは、C# 組み込み型 (System.Object を除く) のみです。Only the C# built-in types (excluding System.Object) may be declared as const. 組み込み型の一覧については、「組み込み型の一覧表」を参照してください。For a list of the built-in types, see Built-In Types Table. クラス、構造体、配列などのユーザー定義型を const にすることはできません。User-defined types, including classes, structs, and arrays, cannot be const. 実行時に (コンストラクターなどで) 一度だけ初期化され、その後は変更できないクラス、構造体、または配列を作成するには、readonly 修飾子を使用します。Use the readonly modifier to create a class, struct, or array that is initialized one time at runtime (for example in a constructor) and thereafter cannot be changed.

C# では、const のメソッド、プロパティ、またはイベントはサポートされません。C# does not support const methods, properties, or events.

enum 型を使用すると、組み込みの整数型 (intuintlong など) の名前付き定数を定義できます。The enum type enables you to define named constants for integral built-in types (for example int, uint, long, and so on). 詳細については、「enum」を参照してください。For more information, see enum.

定数は、宣言するときに初期化する必要があります。Constants must be initialized as they are declared. 次に例を示します。For example:

class Calendar1
{
    public const int months = 12;
}

この例では、定数 months は常に 12 になり、クラス自体によっても変更できません。In this example, the constant months is always 12, and it cannot be changed even by the class itself. 実際、コンパイラが C# ソース コードで定数の識別子 (この場合は months) を検出すると、コンパイラが生成する中間言語 (IL) コードには、識別子の代わりにリテラル値が直接出力されます。In fact, when the compiler encounters a constant identifier in C# source code (for example, months), it substitutes the literal value directly into the intermediate language (IL) code that it produces. 実行時に定数に関連付けられる変数アドレスが存在しないため、const フィールドは、参照渡しすることも、式の左辺値として指定することもできません。Because there is no variable address associated with a constant at run time, const fields cannot be passed by reference and cannot appear as an l-value in an expression.

注意

DLL などの他のコードに定義されている定数値を参照するときは、注意が必要です。Use caution when you refer to constant values defined in other code such as DLLs. 新しいバージョンの DLL で定数の新しい値を定義しても、その新バージョンを対象にプログラムを再コンパイルするまで、プログラムには古いリテラル値が保持されたままになります。If a new version of the DLL defines a new value for the constant, your program will still hold the old literal value until it is recompiled against the new version.

同じ型の複数の定数を、次のように同時に宣言できます。Multiple constants of the same type can be declared at the same time, for example:

class Calendar2
{
    const int months = 12, weeks = 52, days = 365;
}

定数の初期化に使用する式は、循環参照を形成しない限り別の定数を参照できます。The expression that is used to initialize a constant can refer to another constant if it does not create a circular reference. 次に例を示します。For example:

class Calendar3
{
    const int months = 12;
    const int weeks = 52;
    const int days = 365;

    const double daysPerWeek = (double) days / (double) weeks;
    const double daysPerMonth = (double) days / (double) months;
}

定数は、publicprivateprotectedinternalprotected internal または private protected としてマークできます。Constants can be marked as public, private, protected, internal, protected internal or private protected. これらのアクセス修飾子により、クラスのユーザーが定数にアクセスする方法が定義されます。These access modifiers define how users of the class can access the constant. 詳細については、「アクセス修飾子」を参照してください。For more information, see Access Modifiers.

定数の値は型のすべてのインスタンスで同じであるため、定数は静的フィールドのようにアクセスされます。Constants are accessed as if they were static fields because the value of the constant is the same for all instances of the type. 定数の宣言に static キーワードは使用しません。You do not use the static keyword to declare them. 定数を定義しているクラスに含まれていない式で定数を使用する場合は、クラス名、ピリオド、定数の名前を使用する必要があります。Expressions that are not in the class that defines the constant must use the class name, a period, and the name of the constant to access the constant. 次に例を示します。For example:

int birthstones = Calendar.months;

C# 言語仕様C# Language Specification

詳細については、「C# 言語の仕様」を参照してください。For more information, see the C# Language Specification. 言語仕様は、C# の構文と使用法に関する信頼性のある情報源です。The language specification is the definitive source for C# syntax and usage.

関連項目See also