调用基本方法和派生方法

Sir*_*lot 1 c# c++

在C#和C++中,是否可以使用相同的签名调用方法的基本版本和派生版本,而不是覆盖基类版本?

RJ *_*han 5

在C#中,如果派生方法是覆盖,则不是,但如果标记为,则为yes new.但是在使用这个结构时你必须要小心,因为在大多数情况下,你的对象的消费者并不会真正想到它;

static class Program
{
    static void Main()
    {
        Base baseObject = new Derived();
        Derived derivedObject = new Derived();
        Console.Write(derivedObject.Test());
        Console.Write(baseObject.Test());
        Console.Write(((Base)derivedObject).Test());
    }
}

class Base
{
    public virtual int Test()
    {
        return 1;
    }
}

class Derived : Base
{
    public new int Test()
    {
        return 2;
    }
}
Run Code Online (Sandbox Code Playgroud)