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つのコンストラクターが呼び出された後ココが実行される } }
コメント
コメントを投稿