導入
newでオブジェクトを作るとき、最初に必要な値を渡して初期化したいことがあります。そのための特別なメソッドがコンストラクタです。
図解
flowchart LR
N["new Person("Taro", 20)"] --> CT["コンストラクタ<br/>Person(name, age)"]
CT --> INIT["Name=Taro / Age=20<br/>で初期化された実体"]
サンプル
// new のときに初期値を渡す
var person = new Person("Taro", 20);
person.Introduce(); // 私はTaro、20歳です
class Person
{
public string Name { get; }
public int Age { get; }
// コンストラクタ: クラス名と同じ名前のメソッド。new のとき呼ばれる
public Person(string name, int age)
{
Name = name;
Age = age;
}
public void Introduce()
{
Console.WriteLine($"私は{Name}、{Age}歳です");
}
}
- コンストラクタはクラス名と同じ名前のメソッド、戻り値の型は書かない
new クラス名(引数)で呼ばれ、オブジェクトの初期値を設定する- 必須の値をコンストラクタで受け取れば「未初期化のオブジェクト」を防げる
演習
var book = new Book("C#入門", 2400);
book.Show(); // 「C#入門」は2400円
// TODO: タイトルと価格をコンストラクタで受け取る Book クラスを定義し、
// Show() で "「タイトル」は価格円" と出力してください
___
- 期待される出力:
「C#入門」は2400円
ヒント1を見る
コンストラクタpublic Book(string title, int price)でプロパティに代入します
ヒント2を見る
class Book { public string Title { get; } public int Price { get; } public Book(string title, int price) { Title = title; Price = price; } public void Show() { Console.WriteLine($"「{Title}」は{Price}円"); } }
まとめ
- コンストラクタはクラス名と同名の初期化用メソッド
newのときに呼ばれ、必要な初期値を受け取る- 必須値をコンストラクタで要求すると未初期化を防げる
次回: オブジェクト自身を指す「this」とメソッドです。