如何将父类转换为子类

时间:2014-06-05 03:31:08

标签: c# polymorphism

我有一个问题,如何将父类强制转换为子类或返回子类 当我声明具有某种条件的父类时

例如:我有参数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();

2 个答案:

答案 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);
   ...
}

基本上,您需要确定多边形中子类的形状类型,并设置子类的不同成员。这可能是一团糟。