一段有关 override / new 的小程序
using System;
class A
{
public virtual void Foo()
{
Console.WriteLine("Call on A.Foo()");
}
}
class B : A
{
public virtual void Foo()
{
Console.WriteLine("Call on B.Foo()");
}
}
class C : B
{
public override void Foo()
{
Console.WriteLine("Call on C.Foo()");
}
}
class D
{
/* 因为 class B 没有 override 基类的 Foo() 实现,所以打印出了 "Call on A.Foo()".
* 缺乏合适的 overriding 的情况下,程序调用了 c1 所声明的的类型 A 中的 Foo().
*/
static void Main()
{
A c1 = new C();
c1.Foo();
Console.ReadLine();
}
}
class A
{
public virtual void Foo()
{
Console.WriteLine("Call on A.Foo()");
}
}
class B : A
{
public virtual void Foo()
{
Console.WriteLine("Call on B.Foo()");
}
}
class C : B
{
public override void Foo()
{
Console.WriteLine("Call on C.Foo()");
}
}
class D
{
/* 因为 class B 没有 override 基类的 Foo() 实现,所以打印出了 "Call on A.Foo()".
* 缺乏合适的 overriding 的情况下,程序调用了 c1 所声明的的类型 A 中的 Foo().
*/
static void Main()
{
A c1 = new C();
c1.Foo();
Console.ReadLine();
}
}