C#入門㉒ コンストラクタ ── 作るときに、まとめて初期設定
前回は「インスタンス(設計図から作る実物)」をやりました。
今回は、インスタンスを作るときに、初期設定をまとめてやる仕組み。コンストラクタです。
コンストラクタとは、インスタンスを作る瞬間に、自動で実行される特別な処理です。
作った後の設定が、面倒だった
前回まで、インスタンスを作った後に、データを1つずつ設定していました。
Person taro = new Person();
taro.Name = "山田";
taro.Age = 20;
new してから、名前を入れて、年齢を入れて…。3人作るなら、これを3回。少し面倒です。
それに、設定し忘れる危険もあります。
Person taro = new Person();
taro.Name = "山田";
// 年齢を設定し忘れた! → taro.Age は 0 のまま
「作るときに、必要な情報をまとめて渡せたら」便利ですよね。それを実現するのが、コンストラクタです。
書き方を見てみる
Person に、コンストラクタを追加します。
class Person
{
public string Name { get; set; }
public int Age { get; set; }
public Person(string name, int age) // コンストラクタ
{
Name = name;
Age = age;
}
}
public Person(...) の部分がコンストラクタです。少し変わった見た目ですが、特徴があります。
- 名前が、クラス名とまったく同じ(
Person) - 戻り値の型がない(
voidもintも書かない)
この2つが、コンストラクタの目印です。中身は、渡された情報(引数)を、自分のデータに設定しているだけ。第16回でやった引数が、ここで活きています。
使ってみる
コンストラクタを作ると、new するときに情報を渡せるようになります。
Person taro = new Person("山田", 20);
Console.WriteLine(taro.Name); // 山田
Console.WriteLine(taro.Age); // 20
new Person("山田", 20) と書くだけで、作ると同時に名前と年齢が設定されました。
前のように、後から1つずつ設定する必要がありません。
// 前のやり方
Person taro = new Person();
taro.Name = "山田";
taro.Age = 20;
// コンストラクタを使うと
Person taro = new Person("山田", 20);
3行が1行に。しかも、設定し忘れがなくなります。作るときに必ず名前と年齢を渡すルールなので、「年齢が未設定」が起きません。
コンストラクタは、いつ動くのか
名前のとおり、コンストラクタは「構築する(construct)」処理です。new した、その瞬間に、自動で実行されます。
Person taro = new Person("山田", 20);
// ↑ ここで、コンストラクタが自動的に動く
自分で taro.Constructor() のように呼ぶ必要はありません。new が、自動で呼んでくれます。「実物が生まれる瞬間の、初期設定」だと考えると分かりやすいです。
実は、ずっと使っていた
ここで、ひとつ種明かしを。これまで書いてきた new Person() の、最後のカッコ ()。
Person taro = new Person();
このカッコ、実はコンストラクタを呼んでいたんです。コンストラクタを自分で書かない場合、C#が「何もしない、空のコンストラクタ」を用意してくれていました。だから () で済んでいたのです。
そして第12回の new List<int>() も、同じ。あの () も、List のコンストラクタを呼んでいました。知らないうちに、ずっと使っていたんですね。
つまずきポイント
初心者が戸惑うのが、コンストラクタを書くと、引数なしで new できなくなることです。
class Person
{
public Person(string name, int age) { ... } // 引数ありのコンストラクタを書いた
}
Person taro = new Person(); // 引数なし → エラー!
Person taro = new Person("山田", 20); // 引数あり → OK
「名前と年齢を渡してね」というコンストラクタを書いた以上、何も渡さない new Person() はルール違反になります。
もし両方使いたいなら、引数なしのコンストラクタも別に書く、という方法もあります(複数書けます)。今は「コンストラクタを書いたら、そのルールに従って new する」と覚えておけば十分です。
まとめ
コンストラクタは、インスタンスを作る瞬間に動く、初期設定の処理。
class Person
{
public Person(string name, int age) // クラス名と同じ、戻り値なし
{
Name = name;
Age = age;
}
}
Person taro = new Person("山田", 20); // 作ると同時に設定
newした瞬間に、自動で実行される- 作るときに必要な情報を、まとめて渡せる
- 設定し忘れを防げる
- 名前はクラス名と同じ、戻り値の型は書かない
次回は、いよいよオブジェクト指向の山場、継承 です。クラスを「受けつぐ」という考え方を学びます。

