没有虚拟和覆盖的方法覆盖仅返回基类方法

时间:2019-06-04 11:46:18

标签: c# oop inheritance overriding

我只有一个基本问题:

下面的代码中的

仅返回派生类方法,但我不知道为什么。请帮助找出问题所在。

class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            A value = new B();
            value.method();
            Console.Read();
        }
    }
    class A
    {
        public void method()
        {
            Console.WriteLine("A");
        }
    }
    class B : A
    {
        public void method()
        {
            Console.WriteLine("B");
        }
    }

1 个答案:

答案 0 :(得分:1)

如果您未明确添加任何修饰符(例如virtualoverride),则将new隐式添加到代码中,从而产生以下内容:

class B : A
{
    public new void method()
    {
        Console.WriteLine("B");
    }
}

隐藏基本实现,但(如果您的引用的类型为B)。在您的情况下,您有一个基类型为A的引用,该引用对new成员没有任何了解,因此将始终对基类成员进行调用

我不知道您为什么这里没有virtualoverride。如果确实无法添加它们,则需要派生类型的引用:

B value = new B();
value.method();