C# 入門 & 実践 / C sharp
3-13. override // new / virtual
override は、前項の通り、完全上書きだが、new virtual を利用すると派生クラスのみに限定される。
表現は難しいが、以下のような結果になる。
+++++++++++++++++++++++++++
+ override
+++++++++++++++++++++++++++
class HelloBase
{
public virtual void PrintHello()
{
Console.WriteLine("HelloBase");
}
}
class HelloBase2 : HelloBase
{
public override void PrintHello()
{
Console.WriteLine("HelloBase 2");
}
}
class Hello
{
static void Main(string[] args)
{
HelloBase hb = new HelloBase();
hb.PrintHello();
HelloBase2 hb2 = new HelloBase2();
hb2.PrintHello();
// 型指定は、Hellobaseでコンストラクタは、Hellobase2を使っている。
HelloBase hb3 = new HelloBase2();
hb3.PrintHello();
}
}
HelloBase
HelloBase 2
HelloBase 2
この3つ目が変わってくる。
+++++++++++++++++++++++++++
+ override
+++++++++++++++++++++++++++
class HelloBase
{
public virtual void PrintHello()
{
Console.WriteLine("HelloBase");
}
}
class HelloBase2 : HelloBase
{
public new virtual void PrintHello()
{
Console.WriteLine("HelloBase 2");
}
}
class Hello
{
static void Main(string[] args)
{
HelloBase hb = new HelloBase();
hb.PrintHello();
HelloBase2 hb2 = new HelloBase2();
hb2.PrintHello();
// 型指定は、Hellobaseでコンストラクタは、Hellobase2を使っている。
HelloBase hb3 = new HelloBase2();
hb3.PrintHello();
}
}
HelloBase
HelloBase 2
HelloBase
これで、HellobaseのPrintHelloはオーバーライドされていないことがわかる。
3-12. ポリモーフィズム / 継承 / virtual / override «
3. C# 入門 / 基礎、型、文法、基本? »
3-14. 抽象クラス / abstract / override / sealed class
C# 入門 & 実践 / C sharp