在两个子类中存储不同类型的正确方法

时间:2014-04-06 14:40:51

标签: c# inheritance interface composition

我在C#工作,我正在尝试编写一个带有两个子类的AbstractTriangle层次结构:Triangle和SpecialTriangle。

三角形由线组成,但SpecialTriangles由SpecialLines组成!

我可以想出多种方法来存储三角形中的线条:

  1. AbstractTriangle包含AbstractLine
  2. 列表
  3. AbstractTriangle包含ILine
  4. 列表
  5. ITriangle拥有ILine,Triangle和SpecialTriangle列表的访问者负责他们自己的Line或SpecialLine列表
  6. 处理这些层次结构的正确,最优雅的方法是什么?

    我是否需要牺牲返回具体类型线的三角形才能使其正常工作?

1 个答案:

答案 0 :(得分:0)

使用泛型而不是继承:

class Triangle<T> where T: ILine
{
    List<T> edges;
    ···
}

然后将其实例化为

Triangle<Line> 

Triangle<SpecialLine>