コンストラクタ初期化子について
経緯
先日仕事中,visual studioの自動補完をおもむろに使っている際、
コンストラクタで見慣れない書き方を発見したので備忘録として記す。
実際のソース
以下に実際のソースを記す
Bairitu.cs
publicclassBairitu{ stringmbairituName=string.Empty; stringtemp=string.Empty;publicBairitu(stringbairituName){this.mbairituName=bairituName;}publicBairitu(stringbairituName,stringtemp):this(bairituName){this.temp=temp;}}
解説
上記のBairituクラスでは
- string型を引数にとるコンストラクタ
- string型引数を二つとるコンストラクタ
上記二つのコンストラクタが記述されていることが確認できる。
ここで下記の方法でインスタンスを生成する
呼び出し
vartest=newBairitu("hoge","fuge");
その結果メンバ変数の結果は下記のようになる
- mbairituName == "hoge"
- string temp == "fuge"
動きは下記の流れとなる
- 引数二つのコンストラクタが呼び出される
- 引数二つのコンストラクタに「: this(bairituName)」が記述されているので引数一つのコンストラクタが実行される
- 「this.mbairituName = bairituName;」コンストラクタの中身が実行される
- 3.を実行後「this.temp = temp;」引数二つのコンストラクタが実行される
注意点
本記事の内容には必要な前提の説明や補足がない場合がありますのでご注意ください
間違いがあれば編集リクエストまでお願いします。