是否可以从它自己的类中更改对象的类型?

时间:2012-12-17 15:10:02

标签: c# .net types casting

我知道它听起来不太重要,因为它可以在类外部进行更改,但是我可以说我有一个形状类,其中继承了方形和三角形类。

如果我创建一个明显= 4的SideCount属性的新方块,那么如果我将它的SideCount更改为3,我可以将代码放入SideCount的Setter中,将方形对象转换为三角形吗?

上面的例子听起来毫无意义,但这只是我想要解决的原则吗?

如果语言不同,我希望能够在c#

中完成

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:1)

现在,你不能。类型严格遵守其实例内容。

C++中,您可以使用整数值进行参数化的泛型类型。

通常,如果要在运行时更改某些内容,则不应使其属于某种类型。所以,不要让SideCount可写。如果用户想要此属性的其他值,请让用户创建新实例。