定数 (C# プログラミング ガイド)
定数とは、コンパイル時に既知であり、プログラムの実行期間を通じて変更されない値です。 定数を宣言するには、const 修飾子を使用します。 const として宣言できるのは、C# 組み込み型 (System.Object を除く) だけです。 組み込み型の一覧については、「組み込み型の一覧表 (C# リファレンス)」を参照してください。 クラス、構造体、配列などのユーザー定義型を const にすることはできません。 実行時に (コンストラクターなどで) 一度だけ初期化され、その後は変更できないクラス、構造体、または配列を作成するには、readonly 修飾子を使用します。
C# は、const のメソッド、プロパティ、イベントをサポートしません。
列挙型を使用すると、組み込みの整数型 (int、uint、long など) の名前付き定数を定義できます。 詳細については、「enum (C# リファレンス)」を参照してください。
定数は、宣言するときに初期化する必要があります。 次に例を示します。
class Calendar1
{
public const int months = 12;
}
この例では、定数 months は常に 12 になり、クラス自体によっても変更できません。 実際、コンパイラが C# ソース コードで定数の識別子 (この場合は months) を検出すると、コンパイラが生成する IL (Intermediate Language) コードには、識別子の代わりにリテラル値が直接出力されます。 実行時に定数に関連付けられる変数アドレスが存在しないため、const フィールドは、参照渡しすることも、式の左辺値として指定することもできません。
注意
DLL などの他のコードに定義されている定数値を参照するときは、注意が必要です。 新しいバージョンの DLL で定数の新しい値を定義しても、その新バージョンを対象にプログラムを再コンパイルするまで、プログラムには古いリテラル値が保持されたままになります。
同じ型の複数の定数を、次のように同時に宣言できます。
class Calendar2
{
const int months = 12, weeks = 52, days = 365;
}
定数の初期化に使用する式は、循環参照を形成しない限り別の定数を参照できます。 次に例を示します。
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;
}
定数は、public、private、protected、internal、または protected internal とマークできます。 これらのアクセス修飾子によって、クラスのユーザーが定数にアクセスする方法が定義されます。 詳細については、「アクセス修飾子 (C# プログラミング ガイド)」を参照してください。
定数の値は型のすべてのインスタンスで同じであるため、定数は静的フィールドのようにアクセスされます。 定数の宣言に static キーワードは使用しません。 定数を定義しているクラスに含まれていない式で定数を使用する場合は、クラス名、ピリオド、および定数の名前を使用する必要があります。 次に例を示します。
int birthstones = Calendar.months;
C# 言語仕様
詳細については、「C# 言語仕様」を参照してください。 言語仕様は、C# の構文と使用法に関する信頼性のある情報源です。
参照
参照
概念
その他の技術情報
Immutability in C# Part One: Kinds of Immutability (C# の不変性パート 1: 不変性の種類)