0

代码:

class Baseclass
{
    public void Fun()
    {
        Console.Write("Base class" + " "); 

    }
}

class Derived1 : Baseclass
{
    new void Fun()
    {
        Console.Write("Derived1 class" + " "); 

    } 

}
class Derived2 : Derived1 
{
    new void Fun()
    {
        Console.Write("Derived2 class" + " ");

    }
}

根据“new”修饰符的定义:“new 关键字显式隐藏了从基类继承的成员。”。然后,当我们在派生类中使用 new 修饰符调用该方法时,它应该始终将输出作为“Derived2 类”,但在所有三个条件下我总是得到输出“基类”。

        Baseclass d1 = new Derived1();
        Baseclass d2 = new Derived2();
        Baseclass b = new Baseclass();
        d1.Fun();
        d2.Fun();
        b.Fun();

任何人都可以解决我的疑问吗?

4

2 回答 2

1

它确实创建了正确的对象,但要访问其特定属性,您需要先转换它。

于 2016-03-17T05:57:16.263 回答
1

要获得预期的行为,您必须在基类中将方法标记为虚拟并在子类中覆盖它。您将所有变量声明为基类类型,因此应应用基类方法。

于 2016-03-17T06:09:33.683 回答