小编use*_*717的帖子

多态性和铸造

我想了解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()?这是什么原因?

c# polymorphism virtual overriding

12
推荐指数
3
解决办法
1344
查看次数

标签 统计

c# ×1

overriding ×1

polymorphism ×1

virtual ×1