Mam proste trzy klasy:Nowe słowo kluczowe: dlaczego metoda pochodna nie jest wywoływana?
class A
{
public virtual void Write()
{
Console.Write("A");
}
}
class B:A
{
public override void Write()
{
Console.Write("B");
}
}
class C : B
{
public new void Write()
{
Console.Write("C");
}
}
A ja tworzenia obiektów i nazywając ich metody:
A a = new A();
a.Write();
A b = new C();
b.Write();
C c = new C();
c.Write();
i wyjściowe będą: ABC
Co nie mogę zrozumieć dlaczego te kod produkuje B
?:
A b = new C();
b.Write();
myślałem, że powinno być C
. Jednak wielokrotnie testowałem i zawsze jest to B
.
Rozumiem, że A b = new C()
tworzy nowy typ obiektu C. Zatem wyjście powinno być C. Lub czy zachowaniem specjalnym jest wywołanie metody nadpisanej, gdy używamy go bez rzutowania?
Dlaczego tak się dzieje? Ponieważ nie używaliśmy żadnego odniesienia do klasy B
.
Ponieważ tak działa nowe słowo kluczowe. https://msdn.microsoft.com/en-us/library/ms173153.aspx – AndyJ