我有一個抽象類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