C# 为什么新的修饰符在将基类结果隐藏在派生类中之后给了我基类结果?

C# 为什么新的修饰符在将基类结果隐藏在派生类中之后给了我基类结果?,c#,modifiers,C#,Modifiers,代码: 根据“new”修饰符的定义:“new关键字显式隐藏从基类继承的成员。”。 然后,当我们在派生类中调用带有新修饰符的方法时,它应该始终将输出作为“Derived2类”, 但在所有这三种情况下,我总是得到输出“基类” class Baseclass { public void Fun() { Console.Write("Base class" + " "); } } class Derived1 : Baseclass { new vo

代码:

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

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" + " ");

    }
}

有人能澄清我的疑问吗?

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

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

要获得预期的行为,必须在基类中将方法标记为virtual,并在subs中重写它。
您将所有变量声明为基类类型,因此基类方法应适用。

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

请简要解释一下,这只是多态性,您可以为其基类指定一个更具体的类,但这样您将只能访问基类的属性。但是这个物体可以被转换成它的真实形态。示例
var castd1=(Derived1)d1
我承认我的答案部分不完整@paolo_montgomery_russo答案将是您每次看到相同输出被写入的原因。您能简单解释一下吗?这只是多态性,您可以为其基类指定更具体的类,但之后您只能访问基类的属性。但是这个物体可以被转换成它的真实形态。示例
var castd1=(Derived1)d1
我承认我的答案部分不完整@paolo_montgomery_russo答案将是您每次看到相同输出的原因。
        Baseclass d1 = new Derived1();
        Baseclass d2 = new Derived2();
        Baseclass b = new Baseclass();
        d1.Fun();
        d2.Fun();
        b.Fun();