C#のコンストラクターとは?基本の仕組みと使い方を実例付きで解説
C#におけるコンストラクターとは、クラスから新しいオブジェクト(インスタンス)を生成する際に、自動的に実行される特殊なメンバー関数です。オブジェクトの初期化処理を行うために使われ、C#プログラミングにおいて非常に重要な役割を担っています。
コンストラクターの基本的な特徴
コンストラクターには、以下のような特徴があります。
- クラスの新しいインスタンスが作成されるたびに自動的に呼び出される
- 名前は必ずクラス名と完全に同じにする必要がある
- 戻り値の型を持たない(voidも指定しない)
コンストラクターの定義例
コンストラクターはクラス名と同じ名前で定義します。次のように記述します。
class Demo {
public Demo() {}
}このように、Demoクラスに対して同名のDemo()メソッドを定義することで、コンストラクターとして機能します。アクセス修飾子には通常publicを指定します。
コンストラクターの動作を確認できるサンプルコード
ここでは、Lineクラスにコンストラクターを定義し、オブジェクト生成時にどのように処理が実行されるかを確認してみましょう。
サンプルコード
using System;
namespace LineApplication {
class Line {
private double length; // 線の長さ
// コンストラクター
public Line() {
Console.WriteLine("Object is being created");
}
public void setLength( double len ) {
length = len;
}
public double getLength() {
return length;
}
static void Main(string[] args) {
// オブジェクト生成時にコンストラクターが実行される
Line line = new Line();
// 線の長さを設定
line.setLength(6.0);
Console.WriteLine("Length of line : {0}", line.getLength());
Console.ReadKey();
}
}
}実行結果
Object is being created Length of line : 6
コードの解説
このサンプルでは、Mainメソッド内でnew Line()によってオブジェクトを生成した瞬間に、コンストラクターLine()が自動的に呼び出され、「Object is being created」というメッセージが出力されます。
その後、setLength(6.0)で線の長さを設定し、getLength()でその値を取得して表示しています。このように、コンストラクターを利用すれば、オブジェクト生成時に必ず実行したい初期化処理を確実に行うことができます。
まとめ
コンストラクターは、クラス名と同じ名前を持ち、戻り値の型を持たない特殊なメソッドです。オブジェクトが生成されるタイミングで自動的に実行されるため、フィールドの初期化など、インスタンス使用前に行いたい処理を記述するのに最適です。C#でのオブジェクト指向プログラミングの基礎として、ぜひマスターしておきましょう。
-
C#のデストラクタとは?基本の仕組みと実装例をわかりやすく解説
デストラクタ(Destructor)とは、クラスが持つ特殊なメンバー関数の一つで、そのクラスのオブジェクトがスコープ外に出たり、破棄されたりするタイミングで自動的に実行されるものです。主に、オブジェクトが使用していたリソースを解放するために利用されます。デストラクタの命名ルールデストラクタの名前は、クラス名と完全に同じで、先頭にチルダ記号(~)を付けるという決まりがあります。たとえば、クラス名が「Demo」の場合、デストラクタは「~Demo()」と記述します。public Demo() { // コンストラクタ Console.WriteLine(Object is being cre
-
Javaのコンストラクターとは?基本構文から実例までわかりやすく解説
Javaにおけるコンストラクター(constructor)は、記述方法こそメソッドに似ていますが、いくつかの重要な違いがあります。最大の特徴は、コンストラクター名がクラス名と同一である点と、戻り値の型を持たない点です。コンストラクターは自分で呼び出す必要はありません。オブジェクトを生成(インスタンス化)する際に自動的に実行されます。主な役割は、クラスが持つインスタンス変数の初期化です。コンストラクターの基本構文コンストラクターは以下のように定義します。class ClassName { ClassName() { // 初期化処理 } }コンストラクター定義時の