我想了解c#中的多态性,所以通过尝试几个构造我想出了以下情况:
class Shape
{
public virtual void Draw()
{
Console.WriteLine("Shape.Draw()");
}
}
class Circle : Shape
{
public override void Draw()
{
Console.WriteLine("Circle.Draw()");
}
}
Run Code Online (Sandbox Code Playgroud)
我理解为了将Draw()消息发送到几个相关的对象,所以他们可以根据自己的实现行事我必须更改(在这种情况下)形状'指向'的实例:
Shape shape = new Circle();
shape.Draw(); //OK; This prints: Circle.Draw()
Run Code Online (Sandbox Code Playgroud)
但是,为什么,当我这样做时:
Circle circle = new Circle();
circle.Draw(); //OK; This prints: Circle.Draw()
Shape shape = circle as Shape; // or Shape shape = (Shape)circle;
shape.Draw();
Run Code Online (Sandbox Code Playgroud)
它打印:"Circle.Draw()"
为什么在演员表之后调用Circle.Draw()而不是Shape.Draw()?这是什么原因?