Arioch1 Ну - какой интерфейс IParent реализуется объектом TChild, такой и доставать!
Не забываем, что проблема "ромбовидного" наследования характерна именно для множественного наследования полноценных объектов, то есть там, где есть РЕАЛИЗАЦИЯ методов базового класса, которая может быть различна у потомков.
А вот интерфейс - это как бы АБСТРАКТНЫЙ класс, без реализации.
Поэтому все упрощается: в указанном примере все будет ок, вся неоднозначность должна быть снята при реализации TChild, мы просто укажем явно как именно реализовывать IParent.
Добавлено: ego666 Цитата: Убогость в твоей логической цепочке. Ещё раз: TList выполняет ровно то, что в него заложено, но если бы он вообще был ни на что негоден, то тогда можно было бы говорить о убогости.
Убогость в том, что TList мог бы выполнять гораздо больше путем простой метки "virtual" у методов. Причем, причины отсутствия этой метки не ясны. И убогость в том, что он может выполнять ТОЛЬКО ТО что в него заложено, а изменить поведение не получится. Если тебе кажется что менять поведение стандартных контейнеров нет смысла - ну и живи с этим чувством! Я ж не спорю с твоим мироощущением - ты имеешь на него полное право. Видимо, по существу означенной проблемы ты возразить не можешь: TList не может менять свое поведение.
Ну и я никогда не говорил "TList ни на что не годен". Если бы он не мог выполнять то, что в него заложено - стоило бы говорить не об убогости, а о неработоспособности.
Еще раз: есть задача изменить поведение TList. Подробнее: есть реализованный на его базе список файлов в каталоге. Список с отложенным чтением самого каталога (чтобы объект создавался быстро), но по доступу, например к свойству Count этот список читается. Вопрос: как реализовать это на TList?
Мой ответ: никак! По непонятной причине методы TList не виртуальные, нужно делать собственную реализацию. У этого подхода огромный недостаток - для любых посторонних объектов, которые умеют работать с TList, собственная реализация не подходит!