【C#】継承
文法
class 派生クラス名 : 基底クラス{}
継承とは
派生クラスのインスタンスは暗黙的に基底クラスのインスタンスを持つ
このため、基底クラスのメンバにもアクセスすることができる
隠蔽
メンバの実体が1つに収束するわけではなく、基底クラスと派生クラスのメンバが重複している。
例)基底クラス
class MyBase
{
public void Exec() => System.Console.WriteLine("This is Base.");
}
例)派生クラス
class MyInheritance : MyBase
{
public void Exec() => System.Console.WriteLine("This is Inheritance.");
}
メンバの隠蔽では、基底クラスと派生クラスのメンバが重複しているため、どちらが使われるかは、型によって決定される。
class Program
{
static void Main()
{
MyBase mb = new MyInheritance();
mb.Exec(); // This is Base.
MyInheritance mh = new MyInheritance();
mh.Exec(); // This is Inheritance.
auto mh2 = new MyInheritance();
mh2.Exec(); // This is Inheritance.
}
}
明示的な隠蔽
コンパイラ(他の開発者にも)に意図した隠蔽であることを伝えるためには「new 修飾子」を用いる。
class MyInheritance : MyBase
{
public new void Exec() => System.Console.WriteLine("This is Inheritance");
}
継承の禁止
sealed class MyBase
{
public void Exec() => System.Console.WriteLine("This is Base.");
}
これで、以下のコードはエラーになる。
class MyInheritance : MyBase{}