【初心者向け】C#のコンストラクタ入門:オブジェクト生成時の初期化を理解しよう
プログラミングを始めたばかりの方が、クラスからオブジェクトを作るときによく耳にする「コンストラクタ」。この記事では、難しい用語をできるだけ排し、やさしい例えを交えながら「そもそもコンストラクタって何?」「どう書くの?」「いつ使うの?」をすっきり整理して解説します。
目次
1. コンストラクタとは?
- オブジェクトを生成するときに自動で呼ばれる「初期化メソッド」クラスから new クラス名(…) を実行すると、必ずいちばん最初に呼び出される特別なメソッドです。
- リアルな例え:料理のレシピコンストラクタは料理を作る工程でいう「材料を切って鍋に入れる」「火をつける」といった下ごしらえ。料理(オブジェクト)が完成した状態で「すぐ使える」ように、必要な準備をまとめて行います。
2. コンストラクタの役割
- フィールドやプロパティへの初期値代入
- 例:Name や Age といったデータを、渡された引数でセットする
- オブジェクト生成に必要な処理の実行
- 他のクラスやメソッドを呼ぶ準備、ログ出力、例外チェックなど
- 必ず一度は呼ばれるので安心
- new と同じタイミングで実行されるため、使う側は「生成後は 必ず初期化済み」と考えてOK
3. C# におけるコンストラクタの書き方
class Sample
{
// (1) 引数なしコンストラクタ
public Sample()
{
// ここに初期化コードを記述
}
// (2) 引数付きコンストラクタ(オーバーロード)
public Sample(int value, string text)
{
// value や text を使ってフィールドに代入
}
// ※戻り値の型は書かない。メソッド名はクラス名と同じ。
}
- メソッド名:クラス名と完全に一致
- 戻り値:書かない(void も不要)
- アクセス修飾子:多くは public
- オーバーロード:引数を変えて何パターンでも定義可能
4. 動かしてみよう:Personクラスの例
class Person
{
public string Name;
public int Age;
// 引数付きコンストラクタ
public Person(string name, int age)
{
Name = name;
Age = age;
}
}
class Program
{
static void Main()
{
// ① オブジェクト生成と同時に初期化
var hanako = new Person("花子", 20);
// ② 初期化結果を確認
Console.WriteLine($"名前: {hanako.Name}, 年齢: {hanako.Age}");
// → 名前: 花子, 年齢: 20
}
}
- new Person(“花子", 20) を実行した瞬間、Person(string, int) が呼ばれて Name と Age が設定される
5. デフォルトコンストラクタと自動生成
- クラスにコンストラクタを 一つも 定義しない場合→ 引数なしのコンストラクタが自動で用意される
- 一つでも コンストラクタを自前で書くと→ 自動生成が無効に。引数なし版が欲しければ自分で書く必要がある
class Sample
{
// 引数付きだけ定義すると…
public Sample(int x) { /*…*/ }
// 引数なしを使いたいなら自分で追加
public Sample() { /*…*/ }
}
6. コンストラクタのオーバーロード活用例
class Point
{
public int X, Y;
// (A) デフォルトでは原点
public Point()
{
X = 0; Y = 0;
}
// (B) 任意の座標を指定
public Point(int x, int y)
{
X = x; Y = y;
}
}
// 使い分け
var p1 = new Point(); // (A):原点
var p2 = new Point(5, 10); // (B):X=5, Y=10
- 引数なし版で「基本状態」、引数付きで「個別設定」といった使い分けができる
7. まとめとワンポイント
- コンストラクタ は「生成直後に必ず呼ばれる初期化コード」
- 定義ルール:
- メソッド名=クラス名
- 戻り値なし
- アクセス修飾子は通常 public
- デフォルト自動生成 の有無に注意
- オーバーロード で複数パターンの初期化を実現
- 実際のプロジェクトでは、必要最低限の初期値設定をコンストラクタ内にまとめることで、安全・楽ちんにオブジェクト管理ができます
訪問数 5 回, 今日の訪問数 1回
ディスカッション
コメント一覧
まだ、コメントがありません