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