【发布时间】:2016-10-17 00:21:10
【问题描述】:
我正在寻找 /tring 以在 C# 中实现类型安全的树实现。
如何在不使用接口(强制在所有地方重新实现树功能)和不使用强制类型转换的情况下实现类型安全树?
我有使用树作为公共基类的想法,但是类型安全性就消失了。我目前的方法是使用泛型。但是我缺少一些转换回基本类型的方法。
以下是一个简化/无效的示例。 这个想法是返回的节点支持树函数,同时它们也支持它们的基类型行为。 我可以在没有 Node 的情况下使用下面的类并从 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 类型可以不同吗?还是在整棵树中总是一样的?
-
否(仅限子类)。但我想对不同的 T 使用相同的树实现。
标签: c# tree nodes type-safety