C#のクラスにはコンストラクターと呼ばれる特殊なメソッドが存在します。
コンストラクターはクラスのインスタンスが生成された時(キーワード(予約語) new が使われた時)に自動的に呼び出されます。
インスタンスの生成時に呼び出される為、フィールド(メンバー変数)などの初期化を行なう為に使われます。
特別は初期化が必要ない場合はコンストラクターを記述する必要はありません。
省略された場合、フィールド(メンバー変数)は既定値によって初期化されます。
コンストラクターがパラメータを持つクラスのインスタンスを作成する時は、キーワード(予約語) new を使う時にパラメータを指定する必要があります。
コンストラクターもオーバーロードが可能です。
複数定義されたコンストラクターのどれが呼び出されるかは、インスタンスを作成する時のパラメータの指定によって決まります。
キーワード(予約語) this を使う事で他のコンストラクターを呼び出して実行する事が可能です。
コンストラクターはクラスのインスタンスが生成された時(キーワード(予約語) new が使われた時)に自動的に呼び出されます。
インスタンスの生成時に呼び出される為、フィールド(メンバー変数)などの初期化を行なう為に使われます。
コンストラクターの定義
コンストラクターは通常のメソッドとは以下の点で異なります。- クラス名と同じ名前で定義する
- 戻り値は定義しない(戻り値はない)
public class TestClass
{
private int TestField;
public TestClass() //コンストラクター
{
TestField = 100;
}
}
コンストラクターの省略
コンストラクターは省略する事が可能です。特別は初期化が必要ない場合はコンストラクターを記述する必要はありません。
省略された場合、フィールド(メンバー変数)は既定値によって初期化されます。
public class TestClass
{
}
パラメータを持ったコンストラクター
コンストラクターは通常のメソッドと同じようにパラメータを定義する事も可能です。コンストラクターがパラメータを持つクラスのインスタンスを作成する時は、キーワード(予約語) new を使う時にパラメータを指定する必要があります。
public class TestClass
{
private int TestField;
public TestClass(int num) //コンストラクター
{
TestField = num;
}
}
public class Program
{
public static Main()
{
TestClass test;
test = new TestClass(100); // インスタンス生成時にパラメータを渡す
}
}
パラメータの異なる複数のコンストラクター
C#ではパラメータの異なる同じ名前のメソッドを複数定義できるオーバーロードという仕組みがあります。コンストラクターもオーバーロードが可能です。
複数定義されたコンストラクターのどれが呼び出されるかは、インスタンスを作成する時のパラメータの指定によって決まります。
public class TestClass
{
private int TestField;
public TestClass() //コンストラクター(パラメータなし)
{
TestField = 10;
}
public TestClass(int num) //コンストラクター(パラメータ1つ)
{
TestField = num;
}
public TestClass(int num1, int num2) //コンストラクター(パラメータ2つ)
{
TestField = num1 + num2;
}
}
public class Program
{
public static Main()
{
TestClass test1;
TestClass test2;
TestClass test3;
test1 = new TestClass(); // コンストラクター(パラメータなし)が呼ばれる TestField=10
test2 = new TestClass(20); // コンストラクター(パラメータ1つ)が呼ばれる TestField=20
test3 = new TestClass(20, 10); // コンストラクター(パラメータ2つ)が呼ばれる TestField=30
}
}
コンストラクタからコンストラクターを呼ぶ
オーバーロードの仕組みによって複数のコンストラクターを定義できますが、同じような作業はなるべくソースコードを共通にしておきたいものです。キーワード(予約語) this を使う事で他のコンストラクターを呼び出して実行する事が可能です。
public class TestClass
{
private int TestField1;
private int TestField2;
public TestClass()
{
TestField1 = 10;
TestField2 = 20;
}
public TestClass(int num) : this() //this()により、まずパラメータなしのコンストラクターが呼び出される
{
TestField2 = num; //パラメータなしのコンストラクターが呼び出された後ココが実行される
}
public TestClass(int num1, int num2) : this(num1) //this(num1)により、まずパラメータ1つのコンストラクターが呼び出される
{
TestField1 = num1 + num2; //パラメータ1つのコンストラクターが呼び出された後ココが実行される
}
}
コメント
コメントを投稿