Я имею некоторую путаницу с новым ключевым словом, все работает нормально, когда я использую виртуальные и переопределение, но немного по-другому с новым (я думаю, что я что-то отсутствует)Как новое ключевое слово работает в Dérivé класса
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() показывает тип, как Б. Так где я неправильно, кажется, его глупую ошибку :-)
Это означает, что это время компиляции по сравнению с Runtime..I получил вашу точку, thnx. – Wondering