我知道它听起来不太重要,因为它可以在类外部进行更改,但是我可以说我有一个形状类,其中继承了方形和三角形类。
如果我创建一个明显= 4的SideCount属性的新方块,那么如果我将它的SideCount更改为3,我可以将代码放入SideCount的Setter中,将方形对象转换为三角形吗?
上面的例子听起来毫无意义,但这只是我想要解决的原则吗?
如果语言不同,我希望能够在c#
中完成答案 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
可写。如果用户想要此属性的其他值,请让用户创建新实例。