new キーワードと混乱しています。 virtual と override を使用しているときは問題なく動作しますが、 new とは少し異なります (何かが足りないと思います)。
class A
{
public virtual void Test()
{
Console.WriteLine("I am in A");
}
}
class B:A
{
public override void Test()
{
Console.WriteLine("I am in B");
}
}
class Program
{
static void Main(string[] args)
{
B b = new B();
b.Test(); //I am in B
A a = new B();
Console.WriteLine(a.GetType()); // Type-B
a.Test(); //I am in B
Console.ReadKey();
}
}
}
今、新しい
class A
{
public void Test()
{
Console.WriteLine("I am in A");
}
}
class B:A
{
public new void Test()
{
Console.WriteLine("I am in B");
}
}
class Program
{
static void Main(string[] args)
{
B b = new B();
b.Test(); //I am in B
A a = new B();
Console.WriteLine(a.GetType()); //B
a.Test(); // I am in A ? why?
Console.ReadKey();
}
}
MSDN によると、 new キーワードが使用されると、置き換えられた基本クラス メンバーの代わりに、新しいクラス メンバーが呼び出されます。これらの基本クラスのメンバーは非表示のメンバーと呼ばれ、GetType() は型を B として表示しています。