这是一个显示虚拟方法的小代码。
class A
{
public virtual void F() { Console.WriteLine("A.F"); }
}
class B: A
{
public override void F() { Console.WriteLine("B.F"); }
}
class C: B
{
new public virtual void F() { Console.WriteLine("C.F"); }
}
class D: C
{
public override void F() { Console.WriteLine("D.F"); }
}
class Test
{
static void Main()
{
D d = new D();
A a = d;
B b = d;
a.F();
b.F();
}
}
此代码正在打印以下输出:
B.F
B.F
我不明白为什么 aF() 会打印 BF ?
我认为它会打印 DF,因为 B 类覆盖了 A 类的 F(),然后使用“new”关键字将这个方法隐藏在 C 类中,然后在 D 类中再次被覆盖。所以最后 DF 留下了。
但它没有这样做。你能解释一下为什么要打印BF吗?