我有一个问题,如何将父类强制转换为子类或返回子类 当我声明具有某种条件的父类时
例如:我有参数side = 4,然后当我声明新的多边形时,是否有可能通过父类将矩形返回给我?
另外我怎么知道返回是矩形还是三角形?有可能这样做吗?
代码如下:
Public Class Polygon
{
public Polygon(int side)
{
.....
}
}
Public Class Rectangle : Polygon
{
}
Public Class Triangle : Polygon
{
}
Polygon Shape = new Polygon(3);
var t = Shape.GetChildClass();
答案 0 :(得分:0)
是。使用静态工厂方法创建子类。
// For educational purposes only!!!
public class Polygon
{
public static Polygon Create(int sides)
{
switch (sides)
{
case 3:
return new Triangle();
// ...
default:
throw new ArgumentOutOfRangeException(/*...*/);
}
}
}
var shape = Polygon.Create(3);
var isTriangle = shape is Triangle;
那就是说,走这条路会带来很多麻烦......
当然,多边形将具有其边长或等效长度的序列。即使这还不够,因为菱形可能不是一个矩形。投入Square,Diamond,RegularPolygon等,你就搞得一团糟。最好只有一个具有IsTriangle,IsRectangle等方法的Polygon类。而且您可能也需要IsCongruent和其他比较。在一堂课中做起来要简单得多。
答案 1 :(得分:-1)
尝试制作以下功能:
public bool IsTriangle()
{
...
}
然后,
if(Shape.IsTriangle())
{
Triangle t=new Triangle(Shape);
...
}
基本上,您需要确定多边形中子类的形状类型,并设置子类的不同成员。这可能是一团糟。