Упрощенный вид кода:
Названия абстрактные.
/* Базовый класс реализующий дерево */
public class TreeItem : I...
{
TreeItem _Parent;
protected List<TreeItem> _Children = new List<TreeItem>();
...
}
//____________________________________________________________
/* конечный элемент дерева. Указатели на объекты SignalBase нужно хранить в двух деревьях */
public class SignalBase : TreeItem, I...
{
string _Base;
...
}
public class WrapperSignalBase : TreeItem
{
...
public override void NewTreeItem() { _Children.Add(new SignalBase()); }
}
//____________________________________________________________
/* конечный элемент дерева. Указатели на объекты SignalUser нужно хранить в двух деревьях */
public class SignalUser : TreeItem, I...
{
string _User;
...
}
public class WrapperSignalUser : TreeItem
{
...
public override void NewTreeItem() { _Children.Add(new SignalUser()); }
}
//____________________________________________________________
/* Дерево сигналов которое используется как для индивидуального так и для обобщенного хранения данных */
public class TreeSignals : TreeItem
{
WrapperSignalBase _HoldSignalBase;
WrapperSignalUser _HoldSignalUser;
...
}
//____________________________________________________________
public class TestObject : TreeItem, I...
{
TreeSignals _TOSignals;
...
}
/* Как мы видим TestObject-ов может быть много у одного проекта и каждый ТО хранит в себе дерево Сигналов.
Но проект должен собрать все сигналы от каждого ТО в одно общее дерево.
Но не имеет смысла создавать новые объекты SignalBase и SignalUser для передачи в дерево проекта.
Я хотел бы хранить только указатели на них.
Так вот когда я начал скидывать указатели Сигналов в дерево проекта, началась путаница с Парентом, он то указывает на ветку ТО.
*/
public class Project : TreeItem, I...
{
TreeSignals _ProjectSignals;
...
public override void NewTreeItem() { _Children.Add(new TestObject()); }
}
Решение напрашивается очевидное не наследовать SignalBase и SignalUser от TreeItem а просто, создавать их объекты и в список детей добавлять их как конечный элемент.
В общемто получилось все достаточно тривиално.
Но хотел, каким-то образом подсовывать несколько Парентов одному Сигналу (SignalBase и SignalUser).
Думаю теперь понятно, написал.