我正在用C#设计一个通用的树数据结构,我想知道我是否通过拥有所有这些接口/类来设计它:
public interface ITreeNode
{
object GenericValue { get; }
IEnumerable<ITreeNode> Children {get;}
}
public interface ITreeNode<T>:ITreeNode
{
T Value { get; }
}
public class TreeNode : ITreeNode
{
protected readonly LinkedList<ITreeNode> _children = new LinkedList<ITreeNode>();
protected object _value;
public object GenericValue
{
get { return _value; }
}
public IEnumerable<ITreeNode> Children
{
get { return _children; }
}
}
public class TreeNode<T> : TreeNode, ITreeNode<T>
{
public T Value
{
get { return (T)base._value; }
}
}
需要什么:我们需要存储一些连接到其他树的树。因此,一棵树中的叶子可以是另一棵树中的根。这就是所有那些仿制药和非仿制药的原因
答案 0 :(得分:2)
首先,你甚至需要TreeNode
吗?为什么不使用TreeNode<object>
代替TreeNode<T>
类型安全而不进行任何演员?
我认为这里的接口很好。
答案 1 :(得分:0)
我会删除 TreeNode&lt; T&gt; 类和相对接口:您可以非常轻松地实现模板方法来转换通用对象。这样可以避免一个因素和一个衍生因素而牺牲可读性。
接口很好,因为类无法从 TreeNode 派生。
注意:二叉树是N元树的特化。