1

C# と C++ の両方で、基本クラスのバージョンをオーバーライドする代わりに、メソッドの基本バージョンと派生バージョンの両方を同じシグネチャで呼び出すことはできますか?

4

2 に答える 2

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;
    }
}
于 2013-01-23T23:52:58.467 に答える
3

C++ の場合、スコープ解決演算子を使用できます。

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