【C#】コンストラクタの役割と使い方

C# でクラスを使うとき、オブジェクトを生成する際に自動的に呼び出される特別なメソッドがあります。それが「コンストラクタ」です。コンストラクタはオブジェクトの初期化処理を行う役割を持ち、クラス設計で非常に重要な要素となります。本記事ではコンストラクタの基本と使い方、オーバーロードやデフォルト値の指定方法を解説します。

コンストラクタとは?

コンストラクタはクラス名と同じ名前を持ち、戻り値を指定しない特別なメソッドです。new キーワードでオブジェクトを生成したときに自動的に実行されます。

class Person
{
    public string Name;
    public int Age;

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

この例では、Person クラスのオブジェクトを作るときに必ず NameAge を指定できます。

コンストラクタの呼び出し

オブジェクトを生成するとき、コンストラクタが自動的に呼び出されます。

class Program
{
    static void Main()
    {
        Person person = new Person("Taro", 20);
        Console.WriteLine($"名前: {person.Name}, 年齢: {person.Age}");
    }
}

デフォルトコンストラクタ

引数を持たないコンストラクタを「デフォルトコンストラクタ」と呼びます。クラスにコンストラクタを定義しなかった場合、C# が自動的にデフォルトコンストラクタを用意してくれます。

class Product
{
    public string Name;

    // 引数なしのデフォルトコンストラクタ
    public Product()
    {
        Name = "未設定";
    }
}

class Program
{
    static void Main()
    {
        Product item = new Product();
        Console.WriteLine(item.Name); // 未設定
    }
}

コンストラクタのオーバーロード

C# では複数のコンストラクタを定義できます(オーバーロード)。引数の数や型が異なる場合に、それぞれ適切なコンストラクタが呼び出されます。

class Car
{
    public string Model;
    public int Year;

    // 引数なし
    public Car()
    {
        Model = "不明";
        Year = 0;
    }

    // 引数あり
    public Car(string model, int year)
    {
        Model = model;
        Year = year;
    }
}

class Program
{
    static void Main()
    {
        Car car1 = new Car();
        Car car2 = new Car("Prius", 2024);

        Console.WriteLine($"{car1.Model}, {car1.Year}"); // 不明, 0
        Console.WriteLine($"{car2.Model}, {car2.Year}"); // Prius, 2024
    }
}

コンストラクタのチェーン(this)

複数のコンストラクタを定義した場合、共通処理をまとめたいときには this を使って別のコンストラクタを呼び出せます。

class Book
{
    public string Title;
    public int Price;

    public Book() : this("未定", 0)
    {
    }

    public Book(string title, int price)
    {
        Title = title;
        Price = price;
    }
}

まとめ

コンストラクタはオブジェクト生成時に自動的に呼び出され、初期化処理を行う重要な仕組みです。

  • クラス名と同じ名前で、戻り値は書かない
  • デフォルトコンストラクタは省略可能
  • オーバーロードして用途に応じた初期化ができる
  • this を使うことで処理をまとめられる

適切にコンストラクタを設計することで、使いやすく安全なクラス設計につながります。