プログラム構造 列挙型(enum) コンストラクタ・デストラクタ
スケルトン 配列 メソッド
クラス内の記述構成 構造体 プロパティ
HalloWorld 修飾子 静的クラスと静的メンバ
コマンドライン引数 プリプロセッサ ディレクティブ フィールド
コメント 例外と例外処理 演算子のオーバーロード
ステートメント(文) 可変個引数リスト(params) イベント(割り込み)
式(演算子) 名前空間 デリゲート
変数とデータ型 クラスとオブジェクト インデクサ
型変換(キャスト) クラス(class) デリゲート&イベント発生と受信サンプル
定数(Const/Readonly) 部分クラス定義  
文字列(string) 継承  

定数

定数とは、値の変更ができない変数のことで、プログラム上で任意の値で指定しコンパイル時に確定します。フィールドの型の前に const キーワードを使用しフィールドとして宣言します。同時に初期化する必要があります。

class Calendar
{
const int months = 12;
}

実行時に初期化できる定数値宣言を行う場合は、readonly キーワードを使用します。

定数の宣言は、

  • 整数型 (sbyte、byte、short、ushort、int、uint、long、ulong、char、float、double、decimal、bool、string)、列挙型、null への参照である こと
  • 同じ型の複数の定数を、同時に宣言できる
  • 定数の初期化式は、(循環参照を形成しない限り)別の定数も使用できる
  • static宣言はできない
  • アクセス修飾子は、public、private、protected、internal、protected internalが使用できる
class Calendar
{
const int months = 12;
const int weeks = 52;
const int days = 365;

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

定数は、静的フィールドのようにアクセスすることができます。定数をもつクラスの定数を使用する場合、クラス名、ピリオド、および定数名 を指定します。なお、使用する定数は、public宣言されていなければなりません。

//定数をもつクラスの定数を使用する
class Calendar
{
public const int months = 12;
}

class etc
{
void test()
    {
        int months = Calendar.months;
    }
}

注意事項

定数は、プログラムの固定化につながります。メンテナンスも含めて、様々な状況変化に柔軟に対応するためにも、不必要な定数は避けるべきです。絶対的・普遍的な定数( 月数、数学定数πなど)は、プログラム上に埋め込んでも問題ありませんが、それ以外は、たとえ定数的に見えても変わる可能性があります。

  • プログラム上で、普遍的な定数以外は定数としない
  • constでなく、インスタンス化時点で初期化ができるreadonlyを使用する

実用的なアプリケーションでは、実行時にファイルやレジストリなどから固定値を取得します。そうすることで、 突然の変更にもファイルやレジストリの修正で柔軟な対応(プログラムの修正を行わない)ができます。

constreadonlyの比較

const readonly
クラス・メンバ変数およびローカル変数 クラス・メンバ変数のみ
常に静的変数 static変更可能
宣言時にのみ初期化可能 コンストラクタ内で変更可能
コンパイル後はリテラルと同等 コンパイル後は変数と同等
new不可 new可能

class ReadOnly
{
readonly int ID = 0;

public A(int Value)
    {
this.ID = Value;     // コンストラクタ内で変更可能。
}

public void MethodFunc(int Value)
    {
int ID = this.ID;    // 読み取りは可能。
this.ID = Value;     // 書き込み不可。エラー!
}
}

▲ページトップに戻る

【本を読んでもよくらからない】 … 個別指導でわかりやすくお教えします
inserted by FC2 system