コンストラクタとは、インスタンスが生成された時に自動的に最初に呼び出されるメソッドです。
つまり、クラスが new された時に実行されるメソッドです。
クラスが変数を持っている場合など、このコンストラクタを使って変数の初期化を行う事ができます。
コンストラクタの基本
シンプルなコンストラクタ
以下はコンストラクタの簡単な例です。
public class Test { public string Tag; public Test() { Tag = "A"; } }
5行目~8行目がコンストラクタです。
コンストラクタは戻り値を定義しません。
さらに、メソッド名はクラス名と同じである必要があります。
static void Main(string[] args) { Test test = new Test(); }
このようにクラスが new された時点でコンストラクタが呼び出され test.Tag には ”A" という値がセットされます。
引数を持ったコンストラクタ
コンストラクタには引数を持たせる事も可能です。
public class Test { public string Tag; public Test(string tag) { Tag = tag; } }
このようにコンストラクタに引数があるクラスのインスタンスを作成する場合は、new する時に引数を渡して作成します。
static void Main(string[] args) { Test test = new Test("A"); }
コンストラクタをオーバーロード
オーバーロードとは、同じメソッド名で引数の型や数が異なる複数のメソッドを定義する事です。
(オーバーライドではありません。オーバーライドは親クラスのメソッドを定義し直す事。)
オーバーロードはコンストラクタでも同じように定義出来ます。
以下のように、引数の異なる複数のコンストラクタを作ることが出来ます。
public class Test { public string Tag; public Test() { Tag = "A"; } public Test(string tag) { Tag = tag; } }
どちらのコンストラクタが使われるかは、new する時の引数で変わります。
static void Main(string[] args) { Test testA = new Test(); // 引数無しのコンストラクタが呼ばれTagには"A"が入る Test testB = new Test("B"); // 引数有りのコンストラクタが呼ばれTagには"B"が入る }
コンストラクタからコンストラクタを呼ぶ
オーバーロードを使う事でコンストラクタを複数定義する事が出来ます。
ただ、やる内容はほどんど同じになるわけで、初期化が必要な変数が多くなると同じコードを複数書くのは面倒です。
こんな時はコンストラクタからオーバーロードした別のコンストラクタを呼んでしまう方が楽だしタイプミスも無くせます。
public class Test { public string Tag; public Test() : this("A") { } public Test(string tag) { Tag = tag; } }
メソッド名の記述の後に「 : this("A")」と記述しています。
これは Test() が呼び出された時にまず Test(string tag) が実行される事を示しています。
this で記述した引数に合致するコンストラクタがまず実行されて、その後に Test() の {} の中が実行されていきます。
関連記事
- C#の値型と参照型の違い
- C#のコンストラクタでオーバーロード
- C#のコンストラクタの継承
- C#のジェネリックを使おう
- C#のデリゲート (delegate) って何?
- C#のデリゲートお手軽にする匿名メソッド
- C#のラムダ式【=>】って何?
- C#で基底クラスのメソッドを置き換えるオーバーライド
- C#でキャストとas演算子を使いこなす
- C#で型を判別するtypeofとis演算子
- C#の値型でもnullを扱えるようにするNullable
- C#のリソース解放にはIDisposableとusingを使おう
- C#のStringとstring、Int32とint 違いは・・・ない!
- C#でasync/awaitを使った非同期処理
- C#で文字列を指定の区切り文字で分割
- C#のstring.Formatで桁数や書式を指定する
- C#の配列やListをソートする
- C#の配列やListを検索する (Find,FindAll,FindIndex)
- C#の配列やListを高速に検索する (BinarySearch)
- C#の配列の中に指定の要素が存在するかを調べる(LINQ Contains)
- C#の配列の中に条件を満たす要素が存在するかを調べる(LINQ Any)
- C#の配列から条件に合う要素を抽出する(LINQ Where)
- C#の配列で要素毎の処理結果を得る(LINQ Select)
- C#の配列を並び替える(LINQ OrderBy,ThenBy)
- C#の配列をグループ毎に処理する(LINQ GroupBy)
- C#の配列を内部結合(INNER JOIN)する(LINQ Join)
- C#の配列から最初の要素を取り出す(LINQ First,FirstOrDefault)
- C#の配列の重複要素を削除する(LINQ Distinct)
- C#でフォルダ内のファイル名一覧を取得する
- C#でテキストファイルを読み込む
- C#でテキストファイルに書き込む
- C#でバイナリファイルを読み込む
- C#でバイナリファイルに書き込む
コメントをお書きください