Здравствуйте, dfbag7, Вы писали:
D>Здравствуйте, Артем1, Вы писали:
А>>Посоветуйте, как бы вы решали такую проблему.
D>Если можно копировать только общие данные для всех предков, то и включать эту функциональность имхо нужно в базовый класс.
D>Тогда производные классы могут ничего не знать друг о друге.
Ну да, у меня тоже такое CopyTo получилось. Только виртуальное с перегрузкой в наследниках, где они кастят передаваемый объект к себе и если смогли прикастить, копируют свои данные. Ну и вызов базового метода. Только плохо получается, что все реализуют интерфейс IClonable<Конкретный класс> и перегружают метод интерфейса ICopyTo<СамыйБазовыйИзИерархии>

.
D>Но у меня есть ощущение, что рано или поздно вам все равно придется преобразовывать CostInfo в OtherCostInfo и обратно, и этот путь — неправильный. Особенно печально все станет, если родственников CostInfo много, и наследники добавляют в базовый класс различные данные.
Эта печаль уже присутствует. Пока решается постобработкой, так как внешний по отношению к копированию функционал.
D>[skipped]
D>Поскольку деталей про SomeCostHolder нет, то и посоветовать что-либо трудно.
Другой SomeCostHolder — это имелся в виду другой инстанс того же класса. Там верхнеуровневый контейнер другой.
D>Как вариант: можно выделить код, из-за которого "другой SomeCostHolder" не может обрабатывать CostInfo, в отдельный класс...[skipped]
Да, так и сделано. Только вот сама структура DM кривая получилась, поэтому такие вопросы и поднимаются. Думаю о замене наследования композицией, но пока не додумал еще
Раз у по крайне мере двух человек мысли по решению совпали, значит у меня получилось не совсем безнадежно, спасибо