Вызов метода в наследнике, перекрытого с помощью new + UpCast

Имею следующие классы:

class A
{
    virtual public void OutPut()
    {
        Console.WriteLine("Class A");
    }
 }

class B : A
{
     new public void OutPut()
    {
        Console.WriteLine("Class B");
    }
}

Обращаю Ваше внимание, что класс B не переопределяет метод вывода, а скрывает определение метода из класса А с помощью оператора new. Далее в вызывающей части произвожу UpCast, вызываю метод вывода, в дополнение отдельной командой определяю тип во время выполнения с помощью GetType():

static void Main()
    {
        A a = new B();
        a.OutPut();
        Console.WriteLine(a.GetType());
        Console.ReadKey();
    }

Вывод:

Class A
SecondTest.B

Вопрос: как правильно объяснить происходящее? Почему выводится версия метода из класса A, но в тоже время, динамическая идентификация типа во время выполнения говорит, что это класс B?


Ответы (0 шт):