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 は、 extendsShapeであるためです。そのため、 で実行できる操作はすべて で実行できることを絶対に確信できるため、いつでもオブジェクトを であるかのように扱うことができます。CircleShapeCircleShapeShapeCircle

于 2013-02-20T17:36:32.453 に答える
1

Circle は Shape を拡張します。つまり、すべてのプロパティとメソッドを継承します。Circle は Shape の一種の「スーパーセット」です。それを考慮すると、Shape のように使用できます。逆に、円のリストに図形を挿入することはできません。論理的に考えてください。たくさんのシェイプがあります。これらは、円、正方形、三角形などです。ただし、多数の円がある場合は、一般的な形状ではなく、明確に円である必要があります。

于 2013-02-20T18:06:58.050 に答える
1

これはポリモーフィズムの一例だと思います。はからCircle派生しShapeているため、ポリモーフィズムにより、それを基本型として扱うことができます ( type のリストに挿入できますShape) 。

于 2013-02-20T17:38:27.113 に答える
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 に答える