В настоящее время я работаю над простым способом реализации навязчивой древовидной структуры на 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 # требует затрат, и я бы не хотел распространять это приведение в каждой реализации навязчивой коллекции ...