我知道这听起来不太重要,因为它可以在课堂外进行更改,但可以说我有一个形状类,具有从中继承的正方形和三角形类。是否可以从它自己的类中更改对象的类型?
如果我创建了一个SideCount显式为4的新正方形,那么如果我将其SideCount更改为3,是否可以将代码放入SideCount的Setter中,将正方形对象转换为三角形?
上面的例子听起来毫无意义,但它只是我试图解决的原则?
,如果它是语言之间的不同,我想能到C#中做
我知道这听起来不太重要,因为它可以在课堂外进行更改,但可以说我有一个形状类,具有从中继承的正方形和三角形类。是否可以从它自己的类中更改对象的类型?
如果我创建了一个SideCount显式为4的新正方形,那么如果我将其SideCount更改为3,是否可以将代码放入SideCount的Setter中,将正方形对象转换为三角形?
上面的例子听起来毫无意义,但它只是我试图解决的原则?
,如果它是语言之间的不同,我想能到C#中做
不直接不,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);
现在,你不能。类型严格尊重其实例内容。
在C++
中,您可以使用整型值进行参数化的泛型类型。
通常,如果您想在运行时更改某些内容,则不应使其属于某个类型。所以,不要让SideCount
可写。如果用户需要此属性的其他值,则让用户创建新实例。
如果对象的类是“Square”,则不应该能够更改其“SideCount”属性。 – comecme
正方形只是一个例子,我的类有一个整数属性,可以有一个0到100之间的值,但仍然是相同的类型,如果它高于100我想改变它的类型 – Alex