首页 > 解决方案 > C# 使用虚拟覆盖

问题描述

在这个例子中,它通过 virtual、override 关键字使用多态

 abstract class A
    {
        public virtual string Print() { return "A"; }
    }
    
    class B : A
    {
        public override string Print() { return "B"; }
    }
    
    class C : B
    {
        public virtual new string Print() { return "C"; }
    }
    
    class D : C
    {
        public override string Print() { return "D"; }
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            A a = new D();
    
            Console.WriteLine(a.Print());
        }
    }

控制台打印 B。为什么是 B,而不是 D?谢谢你的回答

标签: c#polymorphism

解决方案


很简单,因为最后一次覆盖类的Print函数是在类A的声明期间B

    class B : A
    {
        public override string Print() { return "B"; }
    }

通过声明public virtual new,您隐藏了Print. 因此,在D声明期间,您将覆盖在课堂上声明的新实现C

现在A,一旦你隐藏了这个功能,你对你做了什么一无所知B


推荐阅读