コンストラクタの疑問
コンストラクタの呼び出し - hiziriexの日記の続きになります。
元々あのクラス定義は、
- デフォルトコンストラクタが呼ばれた場合には一定の要素数(例えば3)を指定して初期化
- 要素数を指定してコンストラクタを呼び出した場合には{"hoge1", "hoge2", "hoge3"}のようなstring配列で初期化
- string配列を指定して呼び出した場合にはそのstring配列をメンバ変数に代入
といった処理のテストのために作ったものなんだ。
だけど、3を指定とか、式だけで処理できる内容なら特に問題ないのだが、文を書かなければならない処理が書けない。
不可能じゃないけど、そのためには別にメソッド定義してそれを呼び出さなければならない。
しかもコンストラクタ内での呼び出しなのでstaticメソッドである必要まである。
public class Hoge { private string[] items; public Hoge() : this(3) { Console.WriteLine("Hoge() called"); } public Hoge(int n) : this(hoge(n)) { Console.WriteLine("Hoge(" + n + ") called"); } private static string[] hoge(int n) { string[] items = new string[n]; for (int i = 0; i < n; i++) { items[i] = "hoge" + (i + 1); } return items; } public Hoge(string[] items) { this.items = items; Console.WriteLine("Hoge(string[] items) called"); } }
現状こんなこんな感じになるんだけどいい解決策はないだろうか?
ごちゃごちゃしてまとまらないからこのまま公開します。