(C#)継承クラスの引数付きコンストラクタ

クラスを継承したとき、コンストラクタの定義も省略できるのだろうかと調べてみたが、できないようだ。ただ、基底クラスのコンストラクタと同じ内容を書かなくてもよい記法はあった。

たとえば、「mm検索条件_単項目」クラスから「mm50検索条件_個人」というクラスを継承したとき、継承したクラスのコンストラクタでは「base(cn)」と書いておくと、基底クラスのコンストラクタが呼ばれる。下の16行目。

  1.     class mm検索条件_単項目 : mm50検索条件Base
  2.     {
  3.         public mm50項目条件 条件 { protected set; get; }
  4.  
  5.         public mm検索条件_単項目(mm50項目条件 cn)
  6.         {
  7.             this.条件 = cn;
  8.         }
  9.  
  10.         override internal string getSql() { return this.条件.getSql(); }
  11.         override internal string getタイトル() { return this.条件.getタイトル(); }
  12.     }
  13.  
  14.     internal class mm50検索条件_個人 : mm検索条件_単項目
  15.     {
  16.         public mm50検索条件_個人(mm50項目条件 cn) : base(cn)      // 基底クラスのコンストラクタを指定する
  17.         {
  18.         }
  19.     }

独自の処理を追加したければ、コンストラクタの本体に追記すればよい。

これまで勉強せずに適当に書いていたので知らなかった。勉強しないと。



コンストラクタを書かないとエラーになるのだが、VisualStudio2017では素晴らしいことに、エラーを解消するための提案を示してくれて、コンストラクタを丸ごと追加してくれる。

すごいなvs2017。そのうち勝手にソフトを作ってくれそう。

コメント

このブログの人気の投稿

varchar をデータ型 numeric に変換中に、算術オーバーフロー エラーが発生しました。