【发布时间】:2014-05-29 03:03:38
【问题描述】:
我想了解 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 = 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()?这是什么原因?
【问题讨论】:
-
强制转换不会改变实际实例 - 只是指向它的变量。
-
+1 好问题,感谢您真正了解 OOP 中发生的事情。
标签: c# polymorphism overriding virtual