这是太多的继承/实现吗?

时间:2011-05-02 19:02:56

标签: c# data-structures tree

我正在用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; }
    }
}
  1. 您能否就改进/简化提出建议?
  2. 您将如何实现二叉树节点?使用另外2个接口和另外2个类或者有更好的方法吗?
  3. 需要什么:我们需要存储一些连接到其他树的树。因此,一棵树中的叶子可以是另一棵树中的根。这就是所有那些仿制药和非仿制药的原因

2 个答案:

答案 0 :(得分:2)

首先,你甚至需要TreeNode吗?为什么不使用TreeNode<object>代替TreeNode<T>类型安全而不进行任何演员?

我认为这里的接口很好。

答案 1 :(得分:0)

我会删除 TreeNode&lt; T&gt; 类和相对接口:您可以非常轻松地实现模板方法来转换通用对象。这样可以避免一个因素和一个衍生因素而牺牲可读性。

接口很好,因为类无法从 TreeNode 派生。

注意:二叉树是N元树的特化。