クラスの基本から実践へ!初期化子とコンストラクターを学ぼう


1. クラスとは?

クラスは、データ(プロパティ)や動作(メソッド)をまとめた設計図です。これを使って実際に動く「インスタンス」を作ります。

まずは簡単なクラスを作りましょう。

using System;

class Player
{
    public string Name { get; set; } // プレイヤーの名前
    public int HP { get; set; }      // プレイヤーのHP
}

class Program
{
    static void Main(string[] args)
    {
        // インスタンスを作成
        Player player = new Player();
        player.Name = "勇者";
        player.HP = 100;

        // 値を表示
        Console.WriteLine($"プレイヤー名: {player.Name}, HP: {player.HP}");
    }
}

ポイント:

  • new Player() でクラスのインスタンス(実体)を作成。
  • player.Nameplayer.HP に値を代入して設定。
  • この方法は「クラスの基本的な使い方」を学ぶのに最適です。

2. 初期化子を使って簡潔に設定する

上記のコードは、インスタンスを作った後に値を設定していますが、「初期化子」を使うともっと簡潔に書けます。

using System;

class Player
{
    public string Name { get; set; } // プレイヤーの名前
    public int HP { get; set; }      // プレイヤーのHP
}

class Program
{
    static void Main(string[] args)
    {
        // 初期化子を使ったインスタンス作成
        Player player = new Player
        {
            Name = "勇者",
            HP = 100
        };

        Console.WriteLine($"プレイヤー名: {player.Name}, HP: {player.HP}");
    }
}

なぜこれを使うのか?

  • コードがスッキリして見やすくなる。
  • 初期値をまとめて設定できるのでミスが減る。

3. コンストラクターを使って必須の値を設定する

ここからもう一歩進んで「コンストラクター」を使います。
コンストラクターは、インスタンスを作成する時に初期値を必ず設定させる仕組みです。

using System;

class Player
{
    public string Name { get; set; } // プレイヤーの名前
    public int HP { get; set; }      // プレイヤーのHP

    // コンストラクターを定義
    public Player(string name, int hp)
    {
        Name = name;
        HP = hp;
    }
}

class Program
{
    static void Main(string[] args)
    {
        // コンストラクターを使ってインスタンス作成
        Player player = new Player("勇者", 100);

        Console.WriteLine($"プレイヤー名: {player.Name}, HP: {player.HP}");
    }
}

なぜコンストラクターを使うのか?

  • ミスを防ぐため: 初期化し忘れがなくなる。
  • 分かりやすい: 「何を設定すればいいか」がコンストラクターを見れば分かる。

4. 引数なしのデフォルトコンストラクタで初期値を設定

引数なしのコンストラクタでプロパティにデフォルト値を設定する方法です。

using System;

class Player
{
    public string Name { get; private set; }
    public int HP { get; private set; }

    // 引数なしのデフォルトコンストラクタ
    public Player()
    {
        Name = "名無し"; // デフォルトの名前
        HP = 50;         // デフォルトのHP
    }
}

class Program
{
    static void Main(string[] args)
    {
        // デフォルトコンストラクタを使用してインスタンス作成
        Player player = new Player();
        Console.WriteLine($"プレイヤー名: {player.Name}, HP: {player.HP}");
    }
}

デフォルト値

  • コンストラクタ内で直接プロパティに値を設定します。
  • デフォルトの状態が一目で分かりやすくなります。

4. コンストラクターで別のコンストラクタを呼び出す

コンストラクターに「デフォルト値」を持たせると、さらに柔軟なコードが書けます。

using System;

class Player
{
    public string Name;
    public int HP;

    // デフォルト値を持つコンストラクター
    public Player() : this("名無し", 50) { }

    public Player(string name, int hp)
    {
        Name = name;
        HP = hp;
    }
}

class Program
{
    static void Main(string[] args)
    {
        // デフォルト値を使用
        Player defaultPlayer = new Player();
        Console.WriteLine($"プレイヤー名: {defaultPlayer.Name}, HP: {defaultPlayer.HP}");

        // 値を指定してインスタンス作成
        Player customPlayer = new Player("勇者", 100);
        Console.WriteLine($"プレイヤー名: {customPlayer.Name}, HP: {customPlayer.HP}");
    }
}

なぜデフォルト値が便利なのか?

  • 毎回すべての値を指定する必要がなくなる。
  • 「デフォルトの設定があれば十分」な場面で便利。

5. まとめと練習問題

まとめ

  • 初期化子は簡単で初心者向き。
  • コンストラクターを使うと、初期化時に必須の値を設定できて便利。
  • デフォルト値を持つコンストラクターで柔軟性が向上。

練習問題

  1. プレイヤーに「攻撃力(Attack)」と「防御力(Defense)」を追加してください。
    • 初期化子を使って設定してみましょう。
  2. コンストラクターを使って「攻撃力」「防御力」を設定するコードを書き直してください。
  3. デフォルト値を持つコンストラクターを追加し、設定を省略した場合の値を設定してください。