我想要理解C#中的多态性,所以通过尝试多种结构,我得出了以下案例:
class Shape
{
public virtual void Draw()
{
Console.WriteLine("Shape.Draw()");
}
}
class Circle : Shape
{
public override void Draw()
{
Console.WriteLine("Circle.Draw()");
}
}
我明白,为了将Draw()消息发送给几个相关的对象,使它们可以根据自己的实现进行操作,我必须改变(在这种情况下)shape“指向”的实例:
Shape shape = new Circle();
shape.Draw(); //OK; This prints: Circle.Draw()
但是为什么,当我这样做:
Circle circle = new Circle();
circle.Draw(); //OK; This prints: Circle.Draw()
Shape shape = circle as Shape; // or Shape shape = (Shape)circle;
shape.Draw();
它输出:"Circle.Draw()"
为什么在进行强制类型转换后会调用 Circle.Draw() 而不是 Shape.Draw()?这其中的原因是什么?