У меня некоторая путаница с новым ключевым словом, все работает нормально, когда я использую virtual и override, но немного по-другому с новым (я думаю, что что-то упустил)
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. При использовании нового ключевого слова новые члены класса вызываются вместо замененных членов базового класса. Эти члены базового класса называются скрытыми, также GetType () отображает тип как B.
Так что, где я иду не так, кажется глупой ошибкой: -)