C#入門㉑ インスタンス ── 設計図から作る「実物」
前回まで、クラス(設計図)に、データと処理を持たせてきました。
今回は、設計図から作る「実物」、インスタンスの話です。これまで new で作ってきたもの、その正体です。
インスタンスとは、クラス(設計図)から作られた「実物」のことです。
これまで作ってきた「実物」のこと
第18回から、こう書いてきました。
Person taro = new Person();
この new Person() で作られた taro。これがインスタンスです。新しい言葉ですが、やってきたことそのものなので、心配いりません。
整理すると、
- クラス … 設計図(
Person) - インスタンス … 設計図から作った実物(
taro)
たい焼きでいえば、型がクラス、焼きあがったたい焼き1個1個がインスタンスです。
ひとつの設計図から、たくさんの実物
インスタンスの大事な性質は、ひとつの設計図から、いくつでも作れることです。そして、それぞれが独立していること。
Person taro = new Person();
taro.Name = "山田";
taro.Age = 20;
Person hanako = new Person();
hanako.Name = "田中";
hanako.Age = 25;
taro と hanako、同じ Person の設計図から作りましたが、中身は別々です。
Console.WriteLine(taro.Name); // 山田
Console.WriteLine(hanako.Name); // 田中
taro の名前を変えても、hanako には影響しません。たい焼きと同じで、ひとつにあんこを足しても、別のたい焼きは変わらない。それぞれが独立した実物なんです。
「設計図」と「実物」を、はっきり分ける
ここで、第18回でも触れた区別を、もう一度はっきりさせます。
class Person { ... } // 設計図(1つ)
Person a = new Person(); // 実物①
Person b = new Person(); // 実物②
Person c = new Person(); // 実物③
設計図は1つ。でも、実物(インスタンス)は何個でも作れる。
設計図そのものには、データは入っていません。「人は名前を持つ」と決めてあるだけ。実際の名前(山田、田中)は、インスタンスごとに持ちます。
この「設計図は共通、データはインスタンスごと」という感覚が、オブジェクト指向の土台です。
なぜ、わざわざインスタンスを作るのか
「最初から変数で持てばいいのでは?」と思うかもしれません。インスタンスの利点は、同じ種類のものを、まとめて・きれいに扱えることです。
たとえば、たくさんの人を List で管理できます。
List<Person> people = new List<Person>();
people.Add(taro);
people.Add(hanako);
foreach (Person p in people)
{
Console.WriteLine(p.Name); // 山田、田中…
}
第12回でやった List と、第13回の foreach が、ここで活きます。Person のインスタンスを、まとめて管理する。バラバラの変数では、こうはいきません。
現実のもの(人、商品、注文…)をクラスにして、そのインスタンスを List でまとめる。これが、実際のプログラムでよく使われる形です。連載でやってきたことが、ここで繋がります。
つまずきポイント
初心者がはまるのが、new を忘れることです。
Person taro; // 名前だけ。まだ実物がない
taro.Name = "山田"; // 実物がないのに、さわろうとしてエラー
Person taro; は、「taro という名前の箱を用意する」と宣言しただけ。まだ中身(実物)はありません。
Person taro = new Person(); // new して、初めて実物ができる
taro.Name = "山田"; // これで使える
第12回の List でも「new してから使う」と出てきましたね。同じです。「実物が必要なら、new する」。これはオブジェクト指向の基本動作です。
まとめ
インスタンスは、クラス(設計図)から作られた実物。
Person taro = new Person(); // インスタンスを作る
Person hanako = new Person(); // 別のインスタンス
- クラスは設計図(1つ)、インスタンスは実物(何個でも)
- インスタンスは、それぞれ独立している
- List と組み合わせて、まとめて管理できる
- 実物が必要なら、必ず
newする
次回は、インスタンスを作るときに、初期設定をまとめてやる コンストラクタ を紹介します。

