我可以理解基本的对象切片,但有时当我们遇到这样的例子时会变得很混乱
using System;
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;
C c = d;
a.F();
b.F();
c.F();
d.F();
}
}
输出 :
B.F
B.F
D.F
D.F
我想知道B类的“f()”函数是如何实现的
D d = new D();
A a = d;
a.F();
如果是的话:
A a = new A();
a.F()
//The result would be => A.F
但是在第一部分中,“a”有一个“d”的运行时对象,所以有人可能认为它是“DF”作为输出,所以它是如何出现在 D、c 和 B 中的,所以正确的输出是“BF”请帮我解决这个问题