Вызов метода в наследнике, перекрытого с помощью 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?