トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

継承.cs

[C#]

派生クラスのコンストラクタでは、特に指定しない限り、自動的に基底クラスの引数なしコンストラクタが呼び出される。

では、基底クラスの引数付きコンストラクタを呼び出したい場合には、どうしたらよいか(たとえば自前の例外を作りたいとき。基本的な前処理はクラスライブラリに任せたい)。

その場合は、明示的に呼び出すbaseキーワードを使う。

using System;

public class MyException : Exception {

    // このコンストラクタでは基底クラスの引数なしコンストラクタが自動的に呼び出される。
    public MyException() {
        // ...
    }

    // こうすれば、Exceptionクラスのエラーメッセージをカスタマイズするコンストラクタを流用できる。
    // 明示的に基底クラスのコンストラクタを呼び出した場合は、基底クラスの引数なしコンストラクタの自動呼出しは行われない。
    public MyException(string s) : base(s) {
        // ...
    }

    // thisキーワードは、自クラス内の同じシグネチャのコンストラクタを呼び出す。
    // 結果としてこのコンストラクタは、base(s)を実行し、MyException(s)を実行し、その後で自身のコードを実行する。
    public MyException(string s, string l) : this(s) {
        this.HelpLink = l;
    }
}

baseキーワードを使って引数付のコンストラクタを呼び出すと、引数なしのコンストラクタは呼び出されない。

クラスライブラリにあるようなクラスは、その辺考慮されているだろうが、自分で基底クラスを作る場合には注意が必要。