C#类多态

时间:2012-06-18 07:13:05

标签: c# polymorphism

为什么以下代码的结果是:

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();
}

2 个答案:

答案 0 :(得分:10)

这是因为virtual不等于override。通过使用virtual关键字,您实际上创建了一个新方法,它是虚方法但对您的类(B类)来说是新的,并且不会覆盖类的A方法。从B继承的C类不知道类的方法f(),因此需要B.f()来覆盖它。在Main方法中,您将创建一个A类数组,其中只存在A.f()方法。 如果你想要

Class A  
Class B  
Class C

输出在B类中使用override而不是virtual

答案 1 :(得分:0)

AAA因为

A[] array = new A[3]; /*main reference to A object*/