调用基本方法和派生方法

时间:2013-01-23 23:46:03

标签: c# c++

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

2 个答案:

答案 0 :(得分:5)

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

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;
    }
}

答案 1 :(得分:3)

对于C ++,您可以使用范围解析运算符:

Derived d;
d.Base::Method();