我有一个抽象类BaseItem声明如下:在父子关系中使用泛型
public abstract class BaseItem
{
public BaseItem Parent { get; protected set; }
public List<BaseItem> Children = new List<BaseItem>();
public abstract string Function1();
}
基本上,我试图实现设计,其中每个项目有一个家长,这将是一种特定类型的和将是不同类型的儿童。
例如,ItemA会让孩子都是ItemB类型。然后,ItemB将具有ItemA类型的父项,并且具有所有ItemC类型的子项。 ItemC将具有ItemB的父项和ItemD类型的子项。
我认为使用泛型来避免不必要的转换会更简单,因为我知道每个继承类的父类和子类都是什么类型。所以我想出了这样的事情:
public abstract class AbstractBase
{
public abstract string Function1();
}
public abstract class BaseItem<T1, T2> : AbstractBase
where T1 : AbstractBase
where T2 : AbstractBase
{
public T1 Parent { get; protected set; }
public List<T2> Children = new List<T2>();
}
public class ItemA : BaseItem<ItemA, ItemB>
{
}
public class ItemB : BaseItem<ItemA, ItemC>
{
}
public class ItemC : BaseItem<ItemB, ItemD>
{
}
public class ItemD : BaseItem<ItemC, ItemD>
{
}
所以两件事。 1.这是一个很好的设计吗?有没有更简单/更好的方法?我真的不喜欢使用第二个抽象基类只是为了能够使用泛型。 2.如果我确实保留这个,处理结尾的最好方法是什么? (即ItemA在我的实际问题域中没有父项,但它需要一个父项来编译。ItemD没有子项,但我需要给它一些东西)
这个问题让我想使用FORTRAN。 – iandisme 2010-08-02 15:40:25
您的代码示例具有'公共类ItemC:BaseItem ',但您可能是指公共类ItemC:BaseItem '。 –
2010-08-02 17:05:30