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