繁体   English   中英

C#类多态性

[英]C# class 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();
}

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

Class A  
Class B  
Class C

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

AAA,因为

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM