У меня проблема с конструкцией древовидной структуры, и я не могу придумать выход.
Я хочу иметь одно дерево классов, содержащее общие данные, и расширить класс Tree с помощью ComplexTree, который будет содержать больше методов, таких как Iterate, DoSomthingOnComplex и т. Д.
вот пример кода, который у меня есть:
class Tree<TData>
{
public TData Data { get; set; }
public ICollection<Tree<TData>> Children { get; private set; }
public Tree<Data>(TData data)
{
// ...
}
public void Iterate(Action<TData> action)
{
action(Data);
Children.ForEach(x => x.Iterate(action));
}
}
class ComplexTree<TData> : Tree<TData>
{
public int ComplexValue1 { get; set; }
public int ComplexValue2 { get; set; }
public ComplexTree(TData data, int cv1, int cv2)
: base(data)
{
// ...
}
public void DoComplexStuffOnTree()
{
// ... might want to use the base methods here
}
}
проблема в том, что, с одной стороны, я не могу действительно предоставить коллекцию, содержащую Tree, любому, у кого есть ComplexTree, и я не могу использовать Iterate для ComplexTree, потому что я не могу использовать значения cv1, cv2, принадлежащие только к наследующему дереву.
Есть ли очевидное решение, которое я пропускаю?
я не должен использовать наследование?
следует переписать все методы?
Спасибо,
John