Это слишком много наследования / реализации? - PullRequest
0 голосов
/ 02 мая 2011

Я проектирую общую древовидную структуру данных на 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 класса или есть лучший способ?

Для чего нужно: нам нужно хранить несколько деревьев, которые связаны с другими деревьями.Таким образом, лист в одном дереве может быть корнем в другом.Вот почему все эти дженерики и не дженерики

Ответы [ 2 ]

2 голосов
/ 02 мая 2011

Прежде всего, вам вообще нужно TreeNode?Почему бы не использовать TreeNode<object> вместо этого, а затем сделать TreeNode<T> типобезопасным без каких-либо приведений?

Я думаю, что интерфейсы здесь в порядке.

0 голосов
/ 02 мая 2011

я бы удалил класс TreeNode и относительный интерфейс: вы могли бы довольно легко реализовать шаблонный метод приведения универсального объекта .Это позволит избежать одного взаимодействия и одного деривации без потери читабельности.

Интерфейс хорош, поскольку класс не может быть производным от TreeNode .

Примечание: двоичное деревоявляются специализацией N-арных деревьев.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...