Я хочу создать иерархическую структуру, которая будет тесно следовать следующей структуре:
(1) INodeBase - содержит свойство Children, представляющее собой коллекцию (INodeBase)
(2) INodeFolder - происходит от INodeBase.
(3) NodeFolder - реализует INodeFolder. Реализация свойства Children должна позволять ему содержать элементы как типа INodeFolder, так и типа INodeItem.
(4) INodeItem - наследуется от INodeBase.
(5) NodeItem - реализует INodeItem. Реализация свойства Children должна позволять ему содержать элементы типа NodeResult.
(6) INodeResult - наследуется от INodeBase.
(7) NodeResult - реализует INodeResult - мне не нужно / не нужно дочернее свойство в этом классе, но я хочу, чтобы пустая коллекция зависала от класса, если общая иерархия может быть правильно структурирована.
По сути, я хочу один базовый тип для узла - и предполагается, что узел может содержать другие узлы. Я думаю, что дженерики - это путь, но проблема в том, что если я запрашиваю всю иерархическую коллекцию, или, скорее, если я фильтрую ее, когда я рекурсивно просматриваю дочернюю коллекцию каждого ребенка (т.е. коллекции), я хочу знать, что к чему - то есть, если я нахожусь в коллекции Children папки, я хочу знать, когда я нажимаю FolderNode и когда я нажимаю ItemNode, а затем, когда я повторяю через свойство Children ItemNode, я хочу знать, что я имею дело только с типом NodeResult.
Итак, каков наилучший подход к вышесказанному?
Chris