6章継承
C#のクラスは、継承(inheritance)というオブジェクト指向言語で一般的なコード再利用メカニズムに対応しています。クラスを記述するときには基底クラス(base class)を指定できます。クラスは、基底クラスから派生することになります。つまり、そのクラスには、追加したメンバに加えて基底クラスに属するすべての要素が含まれます。
クラスは単一継承(single inheritance)のみに対応しています(したがって、1つの基底クラスだけを指定できます)。インターフェイスは多重継承(multiple inheritance)の機能を提供します。値型は継承に対応していません。値型は通常参照で使われないので、継承の主な利点である実行時ポリモーフィズム(polymorphism:多態性)を活かせないためです。いくつかの言語で見られるように、継承は必ずしも値的な振る舞いと相容れないわけではありませんが、問題を引き起こすことが多々あります。例えば、派生型の値を基底型の変数に代入すると、派生型で追加したすべての要素が失われてしまう結果となります。この問題はスライシング(slicing)と呼ばれています。C#は継承を参照型に限定してこの問題を回避しています。派生型の変数を基底型の変数に代入するときには、オブジェクトそのものではなく参照のコピーを行っているため、オブジェクトは変化しません。基底クラスがオブジェクトを複製する方法を提供するが、派生クラスでそれを拡張する方法を提供しない(あるいは提供しても拡張に失敗する)場合にのみスライシングが発生します。
クラスは例6-1に示す構文によって基底クラスを指定します。基底型はクラス名に続くコロンの後ろに書きます。この例は、プロジェクトの他の場所か使用するライブラリの1つで ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access