Какие есть хорошие альтернативы множественному наследованию в .NET?
Я столкнулся с небольшой проблемой с моей иерархией классов в приложении WPF. Это одна из тех проблем, когда у вас есть два дерева наследования, сливающихся воедино, и вы не можете найти какой-либо логический способ заставить ваше наследование работать гладкобез множественное наследование. Мне интересно, есть ли у кого-нибудь блестящие идеи для того, чтобы заставить работать такую систему, не делая невозможным отслеживание или отладку.
Я инженер низкого уровня, поэтому моя первая мысль всегда такова: «О! Я просто напишу некоторые из этих классов на нативном C ++ и буду ссылаться на них внешне! Тогда я смогу повеселиться в своей старой школе!» Увы, это не помогает, когда вам нужно наследовать от управляемых элементов управления ...
Позвольте мне показать фрагмент моей текущей проектной диаграммы классов:
____________________________________ _____________________________________
| CustomizableObject | | System.Windows.Controls.UserControl |
|____________________________________| |_____________________________________|
| string XAMLHeader() | ▲
| string XAMLFooter() |◄--┐ |
| CustomizableObject LoadObject() | \ |
| <Possible other implementations> | \ |
|____________________________________| \ |
▲ ▲ \ |
| | \ |
| | \ |
_________________ ______________________ \ _____________________
| SpriteAnimation | | SpriteAnimationFrame | └---| CustomizableControl |
|_________________| |______________________| |_____________________|
▲ ▲
| |
| |
________ _____________
| Sprite | | SpriteFrame |
|________| |_____________|
Проблема довольно ясна: разделение деревьев объектов CustomizableObject и CustomizableControl --- и вставка UserControl в одно, но не в оба дерева.
Не имеет практического смысла перемещать реализацию CustomizableObject в его производные классы, поскольку реализация не зависит от класса. Кроме того, было бы очень сложно реализовать его несколько раз. Поэтому я действительно не хочу делать CustomizableObject интерфейсом. Интерфейсное решение не имеет для меня никакого смысла. (Интерфейсы имеютникогда действительно, для меня было много смысла, если честно ...)
Так что еще раз говорю, у кого-нибудь есть яркие идеи? Это настоящий рассол. Я хотел бы узнать больше о том, как заставить интерфейсы работать с моим деревом объектов, а не против него. Я делаю этот простой движок спрайтов, используя WPF и C # в качестве твердого упражнения, больше всего на свете. Это очень легко решить в C ++, но мне нужно выяснить, как решить эти проблемы в управляемой среде, вместо того, чтобы бросать руки в воздух и бегать обратно к Win32, когда дела идут плохо.