我有代表因此分層數據結構的名稱IHierachicalItem如下界面通用和非通用接口 - T的
public interface IHierachicalItem
{
IHierachicalItem Parent { get; set; }
IList<IHierachicalItem> Children { get; set; }
}
現在我有多個類,從這個接口繼承:
public class HierachicalItemA : IHierachicalItem
{
public IHierachicalItem Parent { get; set; }
public IList<IHierachicalItem> Children { get; set; }
}
public class HierachicalItemB : IHierachicalItem
{
public IHierachicalItem Parent { get; set; }
public IList<IHierachicalItem> Children { get; set; }
}
public class HierachicalItemC : IHierachicalItem
{
public IHierachicalItem Parent { get; set; }
public IList<IHierachicalItem> Children { get; set; }
}
我想擴展接口,以便類訪問其父級和子級屬性時返回相同的類而不是接口。所以我想過使用一個通用接口:
public interface IHierachicalItem<T> : IHierachicalItem
{
new T Parent { get; set; }
new IList<T> Children { get; set; }
}
現在我面對的,我只希望有孩子的一個實例,不叫像.OfType.ToList()的問題。 我該如何做到這一點?
public class HierachicalItemB : IHierachicalItem<HierachicalItemB>
{
IHierachicalItem IHierachicalItem.Parent { get { return this.Parent as IHierachicalItem; } set { this.Parent = (HierachicalItemB)value; } }
IList<IHierachicalItem> IHierachicalItem.Children { get { return this.Children.OfType<IHierachicalItem>().ToList(); } set { this.Children = value.OfType<HierachicalItemB>().ToList(); } }
public HierachicalItemB Parent { get; set; }
public IList<HierachicalItemB> Children { get; set; }
}
我還可以這樣用.Cast <>而不是.OfType <>但這並不改變的事實,我會打電話給.ToList(),或者如果接口會說,它的ObersavbleCollection一次又一次初始化一個新的ObservableCollection,有什麼想法?