【初心者向け】C#のコンストラクタ入門:オブジェクト生成時の初期化を理解しよう

プログラミングを始めたばかりの方が、クラスからオブジェクトを作るときによく耳にする「コンストラクタ」。この記事では、難しい用語をできるだけ排し、やさしい例えを交えながら「そもそもコンストラクタって何?」「どう書くの?」「いつ使うの?」をすっきり整理して解説します。


1. コンストラクタとは?

  • オブジェクトを生成するときに自動で呼ばれる「初期化メソッド」クラスから new クラス名(…) を実行すると、必ずいちばん最初に呼び出される特別なメソッドです。
  • リアルな例え:料理のレシピコンストラクタは料理を作る工程でいう「材料を切って鍋に入れる」「火をつける」といった下ごしらえ。料理(オブジェクト)が完成した状態で「すぐ使える」ように、必要な準備をまとめて行います。

2. コンストラクタの役割

  1. フィールドやプロパティへの初期値代入
    • 例:Name や Age といったデータを、渡された引数でセットする
  2. オブジェクト生成に必要な処理の実行
    • 他のクラスやメソッドを呼ぶ準備、ログ出力、例外チェックなど
  3. 必ず一度は呼ばれるので安心
    • new と同じタイミングで実行されるため、使う側は「生成後は 必ず初期化済み」と考えてOK

3. C# におけるコンストラクタの書き方

class Sample
{
    // (1) 引数なしコンストラクタ
    public Sample()
    {
        // ここに初期化コードを記述
    }

    // (2) 引数付きコンストラクタ(オーバーロード)
    public Sample(int value, string text)
    {
        // value や text を使ってフィールドに代入
    }

    // ※戻り値の型は書かない。メソッド名はクラス名と同じ。
}
  • メソッド名:クラス名と完全に一致
  • 戻り値:書かない(void も不要)
  • アクセス修飾子:多くは public
  • オーバーロード:引数を変えて何パターンでも定義可能

4. 動かしてみよう:Personクラスの例

class Person
{
    public string Name;
    public int Age;

    // 引数付きコンストラクタ
    public Person(string name, int age)
    {
        Name = name;
        Age  = age;
    }
}

class Program
{
    static void Main()
    {
        // ① オブジェクト生成と同時に初期化
        var hanako = new Person("花子", 20);

        // ② 初期化結果を確認
        Console.WriteLine($"名前: {hanako.Name}, 年齢: {hanako.Age}");
        // → 名前: 花子, 年齢: 20
    }
}
  • new Person(“花子", 20) を実行した瞬間、Person(string, int) が呼ばれて Name と Age が設定される

5. デフォルトコンストラクタと自動生成

  • クラスにコンストラクタを 一つも 定義しない場合→ 引数なしのコンストラクタが自動で用意される
  • 一つでも コンストラクタを自前で書くと→ 自動生成が無効に。引数なし版が欲しければ自分で書く必要がある
class Sample
{
    // 引数付きだけ定義すると…
    public Sample(int x) { /*…*/ }

    // 引数なしを使いたいなら自分で追加
    public Sample() { /*…*/ }
}

6. コンストラクタのオーバーロード活用例

class Point
{
    public int X, Y;

    // (A) デフォルトでは原点
    public Point()
    {
        X = 0; Y = 0;
    }

    // (B) 任意の座標を指定
    public Point(int x, int y)
    {
        X = x; Y = y;
    }
}

// 使い分け
var p1 = new Point();      // (A):原点
var p2 = new Point(5, 10); // (B):X=5, Y=10
  • 引数なし版で「基本状態」、引数付きで「個別設定」といった使い分けができる

7. まとめとワンポイント

  • コンストラクタ は「生成直後に必ず呼ばれる初期化コード」
  • 定義ルール:
    • メソッド名=クラス名
    • 戻り値なし
    • アクセス修飾子は通常 public
  • デフォルト自動生成 の有無に注意
  • オーバーロード で複数パターンの初期化を実現
  • 実際のプロジェクトでは、必要最低限の初期値設定をコンストラクタ内にまとめることで、安全・楽ちんにオブジェクト管理ができます

訪問数 5 回, 今日の訪問数 1回