Mam następujących klas:mylić o "ręcznym" kontra "nowa" w języku C#
class Base
{
public virtual void Print()
{
Console.WriteLine("Base");
}
}
class Der1 : Base
{
public new virtual void Print()
{
Console.WriteLine("Der1");
}
}
class Der2 : Der1
{
public override void Print()
{
Console.WriteLine("Der2");
}
}
To jest mój główny sposób:
Base b = new Der2();
Der1 d1 = new Der2();
Der2 d2 = new Der2();
b.Print();
d1.Print();
d2.Print();
Wyjście jest Base
, Der2
, Der2
.
O ile mi wiadomo, funkcja Override nie pozwoli na uruchomienie poprzedniej metody, nawet jeśli wskazuje na nią wskaźnik. Zatem pierwsza linia powinna również wyprowadzać Der2
. Jednak wyszedł Base
.
Jak to jest możliwe? Jak tam nie działało nadpisanie?
Naprawdę Niesamowite przykład ... Jedyny podstęp tu jest: - intially, metoda BASE został ukryty metodą wirtualną "Der-1", więc metoda over-ride z „Der-2 "NIE MOŻNA wdrożyć. W ten sposób otrzymaliśmy wartość BASE. – Kings