Я ищу/tring для реализации реализации безопасного типа дерева в C#.в C# для реализации типа безопасного дерева (typeafe node)
Как можно реализовать безопасное дерево типа без использования интерфейсов (которые заставляют повторно реализовывать функциональность дерева по всему месту) и без использования приведений?
У меня есть идея использовать дерево как общий базовый класс, но тогда тип безопасности ушел. Мой текущий подход - это использование дженериков. Но я теряю некоторое преобразование обратно к базовому типу.
Ниже приведен пример сокращения/нерабочий. Идея состоит в том, что возвращаемые узлы поддерживают функции дерева, и в то же время они также поддерживают поведение своих базовых типов. Я мог бы использовать ниже класс без и унаследовать от Node, но затем я потеряю безопасность типа с одной стороны, а также получаю проблемы с наследованием, поскольку узлы уже имеют родительские классы.
Я также играл с расширениями класса, но у меня нет ничего, что близко к возможному решению.
Думаю, мне нужен небольшой намек на то, как продолжить. Заранее спасибо.
public class Node<T> // .
{
public Node<T> parent;
public List<Node<T>> children;
protected Node()
{
children = new List<Node<T>>();
parent = null;
}
protected Node(Node<T> parent)
: this()
{
this.parent = parent;
parent.addChildren(this);
}
protected void addChildren(Node<T> child)
{
children.Add(child);
}
public Node<T> getRoot() // returns root node
public List<Node<T>> flatten() // return 1d-list of all nodes.
}
Может ли тип T меняться для каждого узла в дереве? Или это всегда будет одинаковым во всем дереве? – Soukai
Нет (только подклассы). Но я хотел бы использовать ту же реализацию дерева для другого T. – James