1

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

4

2 回答 2

5

在 C# 中,如果派生方法是覆盖,则不是,但如果它被标记为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;
    }
}
于 2013-01-23T23:52:58.467 回答
3

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

Derived d;
d.Base::Method();
于 2013-01-23T23:50:01.217 回答