久々に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社の立ち位置を見ればそれも頷ける気がするね!