C # - Навязчивая древовидная структура с использованием CRTP

В настоящее время я работаю над простым способом реализации навязчивой древовидной структуры на C #. Поскольку я в основном программист на C ++, мне сразу же захотелось использовать CRTP. Вот мой код:

public class TreeNode<T> where T : TreeNode<T>
{
    public void AddChild(T a_node)
    {
        a_node.SetParent((T)this); // This is the part I hate
    }

    void SetParent(T a_parent)
    {
        m_parent = a_parent;
    }

    T m_parent;
}

Это работает, но ... Я не могу понять, почему я должен выполнять приведение при вызове a_node.SetParent ((T) this), поскольку я использую ограничение общего типа ... Приведение в C # требует затрат, и я бы не хотел распространять это приведение в каждой реализации навязчивой коллекции ...

5
задан s0ubap 20 February 2012 в 23:20
поделиться