2012-12-17 50 views
0

我知道这听起来不太重要,因为它可以在课堂外进行更改,但可以说我有一个形状类,具有从中继承的正方形和三角形类。是否可以从它自己的类中更改对象的类型?

如果我创建了一个SideCount显式为4的新正方形,那么如果我将其SideCount更改为3,是否可以将代码放入SideCount的Setter中,将正方形对象转换为三角形?

上面的例子听起来毫无意义,但它只是我试图解决的原则?

,如果它是语言之间的不同,我想能到C#中做

+1

如果对象的类是“Square”,则不应该能够更改其“SideCount”属性。 – comecme

+0

正方形只是一个例子,我的类有一个整数属性,可以有一个0到100之间的值,但仍然是相同的类型,如果它高于100我想改变它的类型 – Alex

回答

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); 
+0

好吧,谢谢,我只是想避免在班级本身之外这样做,因为我会经常打电话,转换只依赖于这个属性。 即使它不是我想要的答案,谢谢! – Alex

+0

但var三角形仍然是Square类的一个实例! –

+1

@AppDeveloper - 如果Mutate在传递'3'时返回'Triangle'的实例,则不会。 – Jamiec

1

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

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

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

相关问题