为什么下面代码的结果是:
Class A
Class A
Class 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();
}
最佳答案
因为virtual
不等于override
。通过使用 virtual
关键字,您实际上创建了一个新方法,它是虚拟的,但它对您的类(B 类)来说是新的,并且不会覆盖类的 A 方法。从 B 继承的类 C 不知道类的 A 方法 f() 所以它需要 B.f() 来覆盖它。在 Main 方法中,您正在创建一个 A 类数组,其中只有 A.f() 方法存在。
如果你想
Class A
Class B
Class C
输出使用 override
而不是类 B 中的 virtual
。
关于C#类多态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11078343/