[C#] 定数を定義する

C/C++で定数を定義するのに#defineマクロを使った。C#では?

C#で#defineマクロは使えるのか?

C#にも#defineは存在する。だけど定数の定義には使えない。

#define (C# リファレンス) – Visual Studio 2008
http://msdn.microsoft.com/ja-jp/library/yt3yck0x(v=vs.90).aspx

#define ディレクティブを使用して、通常 C および C++ で行うように定数値を宣言することはできません。C# の定数は、クラスまたは構造体の静的メンバとして定義することができます。そのような定数がいくつかある場合は、それを保持するための “Constants” クラスを個別に作成することを検討してください。

ちなみに、C#で使えるプリプロセッサディレクティブに関しては以下参照。

C# プリプロセッサ ディレクティブ
http://msdn.microsoft.com/ja-jp/library/ed8yd1ha(v=vs.90).aspx

C#で定数を定義する方法

以下のサイトに説明あり。

方法 : C# で定数を定義する
http://msdn.microsoft.com/ja-jp/library/vstudio/bb397677.aspx

C# では、C および C++ で一般的な #define プロセッサ ディレクティブを使用する方法で定数は定義できません。

整数型 (int、byte など) の定数値を定義するには、列挙型を使用します。 詳細については、「enum (C# リファレンス)」を参照してください。

整数型以外の定数を定義する 1 つの方法としては、Constants という名前の 1 つの静的クラスにそれらをグループ化します。 これを行うには、次の例に示すように、クラス名の前に定数へのすべての参照を付ける必要があります。

クラスの再利用性を高めるための工夫

アプリが多数のクラスで構成されている場合、それぞれのクラスがConstantsクラスを参照するようにしてしまうと、クラスの再利用性が低下する。言い換えるならば、あるクラスを別のプロジェクトにコピーしてビルドすると「Constantsクラスが未定義」と叱られるわけだ。できればConstantsクラスが無いプロジェクトにコピーしても、とりあえずビルドが通るようなクラスにしておきたい。 クラスの再利用性を高めるためには、クラス間の依存性を高くしないことが重要。そのためには、予めクラス内にデフォルトの動作定数を持たせておいて、プログラム起動時に必要に応じてそれを書き換えるといったような実装をするのも一案。コーディングの手間は若干増えるけど、クラスの再利用性は高まるはず。