我有以下接口,代表一种分层数据结构,因此称为 IHierachicalItem。
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; }
}
现在我面临的问题是,我只想拥有一个Children实例,并且不想调用像.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,有什么想法吗?