例如,我有一個抽象類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,但其餘的是父對象?這是做這件事的最好方法嗎?