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?

Respuestas a la pregunta(5)

Su respuesta a la pregunta