Какие есть хорошие альтернативы множественному наследованию в .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, когда дела идут плохо.

Ответы на вопрос(5)

Ваш ответ на вопрос