備忘録

政治/経済/自動運転/Python/Robotics

C#の継承について

1.派生クラスから、基本クラスのprivateメンバーをアクセスする方法

 a) privateなデータへのアクセスを提供するpublic propertyを使う 

 b) protectedメンバを使う

 

注1) C++と違って、継承時に基本クラスのアクセス指定子は書けない

 

2.protectedメンバ

 protectedメンバは派生クラスからのみアクセスできる

 

3.コンストラクタと継承

 baseの引数とすると、基本クラスのコンストラクタに引数を渡せる

 base句が存在しない場合は、基本クラスのデフォルトコンストラクタが呼ばれる

 

4.隠ぺい

 派生クラスの中で、基本クラスのメンバと同じ名前のメンバを定義すると、基本クラスのメンバは隠ぺいされる。newキーワードを使うと、警告なくコンパイルできる。

 "base.メンバー"で基本クラスのメンバにアクセスできる。

 

5.基本クラスの参照で派生クラスを参照

 提題のことをすることができる。

 

6.仮想メソッドとオーバーライド

 呼び出されるメソッドは、変数の型によって決まるのではなく、実際に参照しているオブジェクトインスタンスの型によって決まる<重要 Teach Yourself C# p.315>

 基本クラスの宣言でvirtual

 派生クラスの定義でoverride

 をつかう。

 

7.抽象クラス

 abstract修飾子を使う。このときvirtualは不要。

 1つでもabstractメンバを含むならクラスもabstractとして宣言する。

 抽象クラスのインスタンスは作ることができない。参照はok

 注)C++と書き方が違うので注意。以前の記事参照。

 

8.継承を防ぐ sealed

 sealed class A { }

 sealed public override void func(){ }

 など。

 

9.objectクラス

 すべての型はobjectクラスを継承する。

 したがって組み込みのobjectメソッドをすべての型で使える。

 数値型もobject型を継承しており、参照時にボックス化される。