Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将父类强制转换为子类_C#_Polymorphism - Fatal编程技术网

C# 如何将父类强制转换为子类

C# 如何将父类强制转换为子类,c#,polymorphism,C#,Polymorphism,我有一个问题,如何将父类强制转换为子类或返回子类 当我用一些条件声明父类时 例如:我的参数side=4,那么当我声明新的多边形时,是否有可能通过父类将矩形返回给我 还有,我怎么知道返回是矩形还是三角形?有可能吗 代码如下所示: Public Class Polygon { public Polygon(int side) { ..... } } Public Class Rectangle : Polygon { } Public Class Tria

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

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

对。使用静态工厂方法创建子类

// 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;
也就是说,沿着这条路走下去会带来很多麻烦


当然,一个多边形将有一系列其边的长度或等价物。即使这样也不够,因为菱形可能不是矩形。再加上正方形、菱形、规则多边形等,你就乱七八糟了。最好只使用一个包含IsTriangle、IsRectangle等方法的多边形类。而且你可能还需要一些比较。在一个类中执行此操作要简单得多

尝试创建如下函数:

public bool IsTriangle()
{
   ...
}
那么


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

我已经编辑了你的标题。请参阅“”,其中的共识是“不,他们不应该”。
if(Shape.IsTriangle())
{
   Triangle t=new Triangle(Shape);
   ...
}