Это один из примеров в msdn, связанных с затенением и переопределением:
using System;
namespace test
{
class A
{
public void F() { Console.WriteLine("A.F"); }
public virtual void G() { Console.WriteLine("A.G"); }
}
class B : A
{
new public void F() { Console.WriteLine("B.F"); }
public override void G() { Console.WriteLine("B.G"); }
}
class Test
{
static void Main()
{
B b = new B();
A a = b;
a.F();
b.F();
a.G();
b.G();
Console.WriteLine();
}
}
}
A.F();
B.F();
B.G();
B.G();
I was expecting the out put will be
B.F(); //change is here
B.F();
B.G();
B.G();
, так как A a = b;
a содержит ссылку на объект b и, следовательно, имеет функцию класса, производную от вызова.
Почему вызывается функция A?