10

给定以下代码,我从 Shape 继承了一个类 Circle:

class Shape
{
    void Draw();
}

class Circle : Shape
{
}

void Main(string[] args)
{
    Shape s = new Shape();
    Shape s2 = new Shape();
    Circle c = new Circle();

    List<Shape> ShapeList = new List<Shape>();

    ShapeList.Add(s);
    ShapeList.Add(s2);
    ShapeList.Add(c);
}

怎样才能c加进去ShapeList

4

5 回答 5

10

ACircle 是 a Shape,因为Circleextends Shape。因此,您始终可以将Circle对象视为 a ,Shape因为我们可以绝对确定可以在 a 上执行的所有操作也可以在 aShape上执行Circle

于 2013-02-20T17:36:32.453 回答
1

我相信这是多态的一个例子。由于Circle派生自Shape,因此多态性允许我们将其视为基本类型(让您将其插入到 type 列表中Shape

于 2013-02-20T17:38:27.113 回答
1

Circle 扩展了 Shape,这意味着它继承了它的所有属性和方法。Circle 是 Shape 的一种“超集”。考虑到它,您可以像使用形状一样使用它。你不能做的是反过来,即将一个形状插入到一个圆圈列表中。从逻辑上考虑。你有一堆形状。这些可以是圆形、正方形、三角形等。但是如果你有一堆圆形,它们必须是专门的圆形而不是一般的形状。

于 2013-02-20T18:06:58.050 回答
1

离开编程部分,逻辑上每个圆形,矩形..一切都是形状。就像您在手机中制作联系人列表一样。有些联系人有 T-mobile 连接,有些使用 Vodafone,有些使用 Orange,但都是电话,您以完全相同的方式将它们添加到列表中,没有任何区别。您也可以通过调用不同的联系人来使用此列表来应用多态性:您的调用机制将完全相同,但在运行时(调用)将决定该联系人拥有哪个电话服务。

于 2016-05-20T00:36:26.347 回答
0

这是关于泛型中的协变和逆变。请参阅http://msdn.microsoft.com/en-us/library/dd799517.aspx了解有关此的一些概念。

于 2013-02-20T17:48:28.890 回答