X
    Categories: C#

継承時のコンストラクタ

久々にC#のアプリのプログラムを作成したい時にハマった点

クラスを継承した時のコンストラクタだが…
どうにもコンパイラに怒られてしまっていた。

コンパイラのエラーは下記の通り
※クラス名等はマスクをかけています

エラー 1 ‘project.Libs.class_A’ に、引数を 0 個指定できるコンストラクターがありません

コンストラクタ周辺の文法エラー的な?ものであるらしいが…

class_Aはclass_Bの派生クラス。class_BのコンストラクタとクラスAのコンストラクタは下記のようにしていた

class class_B{
//クラスBのコンストラクタ
public class_B( String param ){
}
}

class class_A: class_B{
//クラスAでは、特にパラメータ的、初期化的な処理は必要ないのでコンストラクタを省略
}

調べてみたところ。上記のようなクラス継承を行っている場合
(※特に基底クラスのコンストラクタにパラメータがある場合のみかもしれないが)
派生クラスでは下記のようなコンストラクタ定義が必要なようだ

class class_A : class_B {
public class_A(String param) : base( param ){
//特に処理の必要がなくともこのコンストラクタ定義が必要らしい
}
}

全くもって、腑に落ちないが
コンパイラ先生から怒られることはなくなった。

以前からこのような仕様であったのだろうか…
などと、全くもって腑に落ちない私は調べてみたところ

2007年にこの仕様が追加されたそうな…
もう7年前ですか…
7年間C#もとい、Windowsのアプリのプログラムを書く機会が無かったということか…
スマート端末激戦時代のMS社の立ち位置を見ればそれも頷ける気がするね!

健巳:
Related Post