0

継承クラスとして正方形と三角形の形状クラスがあります

Square square = new Square();
square.SideCount = 4;
//Logic
square.SideCount = 3;
 
if(square is Triangle)
   {
   //...

SideCount = 4で新しい正方形をインスタンス化する場合、SideCountを3に変更すると、辺が3に設定されている場合に、SideCountのセッターにコードを入れてSquareをTriangleに変換できますか?

4

2 に答える 2

8

直接いいえではありません。Squareのインスタンスをのインスタンスに変更することはできませんTriangle

Shape基本クラスShapeで定義されたのインスタンスを返すメソッドを持つことができます。

public abstract class Shape
{
    public Shape Mutate(int numberOfSides)
    {
        // over simplified example:
        if(numberOfSides == 3)
           return new Triangle();
    }
}

public class Triangle : Shape {}
public class Square : Shape {}

利用方法

var squ = new Square();
var triangle = squ.Mutate(3);
于 2012-12-17T15:14:03.043 に答える
1

今、あなたはできません。タイプは、インスタンスの内容に関して厳密です。

ではC++、整数型でパラメータ化されたジェネリック型を持つことができます。

一般に、実行時に何かを変更したい場合は、それを型に属さないようにする必要があります。したがって、書き込み可能にしないでくださいSideCount。このプロパティに別の値が必要な場合は、ユーザーに新しいインスタンスを作成させます。

于 2012-12-17T15:18:37.700 に答える