Derived Class对象如何添加到Base Class对象List

时间:2013-02-20 17:34:46

标签: c# oop inheritance polymorphism upcasting

鉴于以下代码,我从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

5 个答案:

答案 0 :(得分:9)

Circle Shape,因为Circle扩展了Shape。因此,您始终可以将Circle对象视为Shape,因为我们可以绝对确定可以在Shape上执行的所有操作也可以在Circle上执行。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

答案 4 :(得分:0)

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