如何使用基类对象调用派生函数

pro*_*gix 3 c# inheritance

class Parent
{
    public int GetNo()
    {
        return 1;
    }
}

class Child : Parent
{        
    public Child()
    {

    }

    public int GetNo()
    {                       
        return 2;
    }
}

Parent p = new Child();
p.GetNo();
Run Code Online (Sandbox Code Playgroud)

但它呼吁Base.GetNo().我知道如果我在base中使用virutal它会调用Child.GetNo() 但是我不能在Base中使用virutal因为我必须从已经在DLL中分发的base派生我的类.所以我无法修改基类的现有函数.

任何建议都是有价值的.谢谢

Pet*_*nov 6

你可以施展它:

((Child)p).GetNo();
Run Code Online (Sandbox Code Playgroud)

要么

if(p is Child)
    (p as Child).GetNo();
Run Code Online (Sandbox Code Playgroud)

  • +1,虽然我不喜欢在代码处理结果null时使用`as`进行转换. (3认同)