estoy teniendo las siguientes clases:Confundido acerca de "anular" frente a "nuevo" en 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");
}
}
Este es mi método principal:
Base b = new Der2();
Der1 d1 = new Der2();
Der2 d2 = new Der2();
b.Print();
d1.Print();
d2.Print();
La salida es Base
, Der2
, Der2
.
Hasta donde sé, Override no permitirá que el método anterior se ejecute, incluso si el puntero apunta a ellos. Por lo tanto, la primera línea también debería mostrar Der2
. Sin embargo, salió Base
.
¿Cómo es posible? ¿Cómo la anulación no funcionó allí?
Realmente Un ejemplo increíble ... El único truco aquí es: - Aunque al principio, el método de la base estaba oculto por el método virtual de "Der-1", de modo de anulación método de "Der-2 "NO pudo ser implementado. Por lo tanto, obtuvimos el valor de BASE. – Kings