为什么以下代码的结果是:
A类A
类A
类
public class A {
public virtual void f() {
Console.WriteLine("Class A");
}
}
public class B : A {
public virtual void f() {
Console.WriteLine("Class B");
}
}
public class C : B {
public override void f() {
Console.WriteLine("Class C");
}
}
//...
static void Main(string[] args) {
A[] array = new A[3];
array[0] = new A();
array[1] = new B();
array[2] = new C();
for(int d = 0; d < 3; d++)
array[d].f();
}
Run Code Online (Sandbox Code Playgroud)
Bla*_*ter 10
这是因为virtual不等于override.通过使用virtual关键字,你基本上创建了一个新的方法,这个方法是虚拟的,但它对你的类来说是新的(B类)并且不会覆盖类的A方法.从B继承的C类不知道类的方法f(),因此需要Bf()来覆盖它.在Main方法中,您将创建一个A类数组,其中只存在Af()方法.如果你想
Class A
Class B
Class C
Run Code Online (Sandbox Code Playgroud)
输出使用override而不是virtualB类.