2011-05-02 75 views
0

我設計在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個類,或者有更好的方法嗎?

需要什麼:我們需要存儲一些連接到其他樹的樹。所以,一棵樹上的葉子可以成爲另一棵樹的根。這就是爲什麼所有這些泛型和非泛型的原因

+4

如果您沒有得到足夠有用的答案,有另一個StackExchange站點用於這些類型的問題:http://codereview.stackexchange.com/ – 2011-05-02 19:04:50

+0

看起來不錯。您可能想要考慮它將如何用於您的業務應用程序,以確定是否需要靈活性。例如,如果您始終知道將要存儲的值的類型,請使用ITreeNode 和TreeNode 。 – mellamokb 2011-05-02 19:06:18

+0

mellamokb,我添加了一些信息 – Jill 2011-05-02 19:11:27

回答

2

首先,你甚至需要TreeNode?爲什麼不使用TreeNode<object>而不是TreeNode<T>類型安全,沒有任何投入?

我覺得這裏的接口很好。

0

我會刪除樹節點<牛逼>類和相對界面:你可以實現一個模板方法很容易鑄造通用對象。這將避免一個interace和一個派生,而不犧牲可讀性。

接口很好,因爲一個類不能從TreeNode派生。

備註:二叉樹是N元樹的一種特殊化。