У меня есть следующий интерфейс, представляющий собой иерархическую структуру данных, отсюда и название IHierachicalItemGeneric и необщего интерфейс - Список Т
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; }
}
Я хотел расширить интерфейс так, чтобы классы возвращались при доступе к свойству parent и children одного и того же класса вместо интерфейса. Так я думал об использовании общего интерфейса:
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, какие-нибудь идеи?