C#类多态

标签 c# polymorphism

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

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/

相关文章:

c# - 从模型创建表

Python - wxPython 中的多态性,出了什么问题?

XML 和 XSD - 使用元素名称替换 xsi :type for polymorphism

Java多态问题

asp.net-mvc - 多态模型绑定(bind)

c# - 没有内置方法的舍入

c# - 当通过 n :n-relation 分配记录时如何触发插件执行

c# - 为什么我的继承类没有隐藏我的基类方法?

c# - webBrowser 控件中的 PDF 文档在关闭应用程序时导致 'The memory could not be "read"' 错误

C++ 多态性——调用具有不同签名的派生类方法