C#のクラス - コンストラクター

C#のクラスにはコンストラクターと呼ばれる特殊なメソッドが存在します。
コンストラクターはクラスのインスタンスが生成された時(キーワード(予約語) new が使われた時)に自動的に呼び出されます。

インスタンスの生成時に呼び出される為、フィールド(メンバー変数)などの初期化を行なう為に使われます。



コンストラクターの定義

コンストラクターは通常のメソッドとは以下の点で異なります。
  • クラス名と同じ名前で定義する
  • 戻り値は定義しない(戻り値はない)
  1. public class TestClass
  2. {
  3. private int TestField;
  4.  
  5. public TestClass() //コンストラクター
  6. {
  7. TestField = 100;
  8. }
  9. }


コンストラクターの省略

コンストラクターは省略する事が可能です。
特別は初期化が必要ない場合はコンストラクターを記述する必要はありません。
省略された場合、フィールド(メンバー変数)は既定値によって初期化されます。
  1. public class TestClass
  2. {
  3. }


パラメータを持ったコンストラクター

コンストラクターは通常のメソッドと同じようにパラメータを定義する事も可能です。
コンストラクターがパラメータを持つクラスのインスタンスを作成する時は、キーワード(予約語) new を使う時にパラメータを指定する必要があります。
  1. public class TestClass
  2. {
  3. private int TestField;
  4.  
  5. public TestClass(int num) //コンストラクター
  6. {
  7. TestField = num;
  8. }
  9. }
  10.  
  11. public class Program
  12. {
  13. public static Main()
  14. {
  15. TestClass test;
  16. test = new TestClass(100); // インスタンス生成時にパラメータを渡す
  17. }
  18. }


パラメータの異なる複数のコンストラクター

C#ではパラメータの異なる同じ名前のメソッドを複数定義できるオーバーロードという仕組みがあります。
コンストラクターもオーバーロードが可能です。
複数定義されたコンストラクターのどれが呼び出されるかは、インスタンスを作成する時のパラメータの指定によって決まります。
  1. public class TestClass
  2. {
  3. private int TestField;
  4.  
  5. public TestClass() //コンストラクター(パラメータなし)
  6. {
  7. TestField = 10;
  8. }
  9.  
  10. public TestClass(int num) //コンストラクター(パラメータ1つ)
  11. {
  12. TestField = num;
  13. }
  14.  
  15. public TestClass(int num1, int num2) //コンストラクター(パラメータ2つ)
  16. {
  17. TestField = num1 + num2;
  18. }
  19. }
  20.  
  21. public class Program
  22. {
  23. public static Main()
  24. {
  25. TestClass test1;
  26. TestClass test2;
  27. TestClass test3;
  28. test1 = new TestClass(); // コンストラクター(パラメータなし)が呼ばれる TestField=10
  29. test2 = new TestClass(20); // コンストラクター(パラメータ1つ)が呼ばれる TestField=20
  30. test3 = new TestClass(20, 10); // コンストラクター(パラメータ2つ)が呼ばれる TestField=30
  31. }
  32. }


コンストラクタからコンストラクターを呼ぶ

オーバーロードの仕組みによって複数のコンストラクターを定義できますが、同じような作業はなるべくソースコードを共通にしておきたいものです。
キーワード(予約語) this を使う事で他のコンストラクターを呼び出して実行する事が可能です。
  1. public class TestClass
  2. {
  3. private int TestField1;
  4. private int TestField2;
  5.  
  6. public TestClass()
  7. {
  8. TestField1 = 10;
  9. TestField2 = 20;
  10. }
  11.  
  12. public TestClass(int num) : this() //this()により、まずパラメータなしのコンストラクターが呼び出される
  13. {
  14. TestField2 = num; //パラメータなしのコンストラクターが呼び出された後ココが実行される
  15. }
  16.  
  17. public TestClass(int num1, int num2) : this(num1) //this(num1)により、まずパラメータ1つのコンストラクターが呼び出される
  18. {
  19. TestField1 = num1 + num2; //パラメータ1つのコンストラクターが呼び出された後ココが実行される
  20. }
  21. }



コメント