Ich habe die folgenden Klassen:Verwirrt über "überschreiben" vs. "neu" in 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");
}
}
Das ist meine Hauptmethode ist:
Base b = new Der2();
Der1 d1 = new Der2();
Der2 d2 = new Der2();
b.Print();
d1.Print();
d2.Print();
Der Ausgang ist Base
, Der2
, Der2
.
Soweit ich weiß, lässt Override die vorherige Methode nicht laufen, auch wenn der Zeiger auf sie zeigt. Daher sollte die erste Zeile auch Der2
ausgeben. Jedoch kam Base
heraus.
Wie ist es möglich? Wie hat die Überschreibung dort nicht funktioniert?
wirklich ein tolles Beispiel ... Der einzige Trick ist: - intially, Methode von BASE Jahren wurde durch die virtuelle Methode der "Der-1" versteckt, so over-ride Methode des „Des-2 "konnte nicht implementiert werden. Somit haben wir den BASE-Wert erhalten. – Kings