Polimorfismo y fundición
Quiero comprender el polimorfismo en C #, así que al probar varias construcciones se me ocurrió el siguiente caso:
class Shape
{
public virtual void Draw()
{
Console.WriteLine("Shape.Draw()");
}
}
class Circle : Shape
{
public override void Draw()
{
Console.WriteLine("Circle.Draw()");
}
}
Entiendo que para enviar el mensaje Draw () a varios objetos relacionados, para que puedan actuar de acuerdo con su propia implementación, debo cambiar la instancia a la que (en este caso) la forma está 'apuntando' a:
Shape shape = new Circle();
shape.Draw(); //OK; This prints: Circle.Draw()
Pero por qué, cuando hago esto:
Circle circle = new Circle();
circle.Draw(); //OK; This prints: Circle.Draw()
Shape shape = circle as Shape; // or Shape shape = (Shape)circle;
shape.Draw();
Imprime: "Circle.Draw ()"
¿Por qué llama al Circle.Draw () en lugar de Shape.Draw () después del lanzamiento? ¿Cuál es el razonamiento para esto?