例如,我有一个抽象类ShapeParent,它具有抽象方法CalculateArea();如何添加一个具有相似父对象和另一个具有相似对象列表的父对象到同一对象列表
public abstract class ShapeParent
{
public abstract void CalculateArea();
}
然后,我有两个子对象,它们扩展ShapeParent并实现CalculateArea();第一个是矩形:
public class Rectangle : ShapeParent
{
public override void CalculateArea()
{
//Area calculated here
}
}
,第二个是循环:
public class Circle : ShapeParent
{
public override void CalculateArea()
{
//Area calculated here
}
}
,并考虑场景,我也有一个通用的Shape类也扩展ShapeParent。此形状类将成为集合/列表中使用的所有其他形状的通用容器。它有)呼吁的GetType(额外的方法,得到的基本形状类型:
public class Shape : ShapeParent
{
public object UnderLyingShape { get; set; }
public override void CalculateArea()
{
((ShapeParent)UnderLyingShape).CalculateArea();
}
public Type GetType()
{
return ((ShapeParent)UnderLyingShape).GetType();
}
}
我会然后声明如下列表:
private readonly List<Shapes> _myShapes = new List<Shapes>();
这一切工作正常,但考虑到当我想用一个新的方法CalculateVolume();添加一个新的形状类型,这是一个可塑形状,如Cylinder。到这个形状列表。
这样做的最好方法是什么?我是否可以制作扩展ShapeParent的CylinderParent对象,以便它拾取CalculateArea()方法并为Calculate对象然后实现的CalculateVolume()添加一个抽象定义?但是我可以将它添加到Shapes列表中,因为常用对象是此对象的一个GrandParent,但其余的是父对象?这是做这件事的最好方法吗?