-1

给出下面的代码。我想知道为什么我的输出不是 BAB,而是 BAA

class A
{
    public virtual void display()
    {
        Console.WriteLine("A");
    }
}
class B : A
{
    public new void display()
    {
        Console.WriteLine(" B ");
    }
}
class Program
{
    static void Main(string[] args)
    {
        A obj1 = new B();
        B obj2 = new B();
        obj2.display();
        A r;
        r = obj1;
        r.display();
        r = obj2;
        r.display();
        Console.ReadLine();
    }
}
//Output:
B
A
A

由于 r 现在是对类 B(obj2) 的引用,它应该输出 B,但它正在输出 A。

4

1 回答 1

2

这不是如何new工作的。它这样override工作的。

new(方法隐藏)仅在您的变量类型(注意实际类型无关紧要)是派生类型时才有效。您的第二个测试只是多态性,您需override要这样做。

class B : A
{
    public override void display()
    {
        Console.WriteLine(" B ");
    }
}

旁注,您几乎不需要隐藏方法。

于 2018-10-26T17:00:27.350 回答