0

我有一个正方形和三角形作为继承类的形状类

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

如果我用 SideCount = 4 实例化一个新正方形,那么如果我将它的 SideCount 更改为 3,如果边设置为 3,我可以将代码放入 SideCount 的 Setter 以将 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 回答