У меня возникла проблема с моей иерархией классов в приложении WPF. Это одна из тех проблем, при которой у вас есть два дерева наследования, объединяющихся друг с другом, и вы не можете найти логического способа сделать ваше наследование работать гладко без множественного наследования. Мне интересно, есть ли у кого-нибудь яркие идеи для работы такой системы, не делая этого невозможным для отслеживания или отладки.Какие хорошие альтернативы множественному наследованию в .NET?
Я инженер низкого уровня, поэтому моя первая мысль всегда: «О, я просто напишу некоторые из этих классов на родном 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. Решение для интерфейса не имеет для меня никакого смысла. (Интерфейсы имеют никогда действительно имело для меня смысл, если честно ...)
Итак, я говорю еще раз, у кого есть какие-то яркие идеи? Это настоящий рассол. Я хотел бы узнать больше о том, как заставить интерфейсы работать с моим деревом объектов, а не против него. Я делаю этот простой сценарий sprite с помощью WPF и C# в качестве прочного упражнения, больше всего на свете. Это так легко решить на C++ - но мне нужно выяснить, как решить эти проблемы в управляемой среде, а не бросать мои руки в воздух и бежать обратно к Win32 всякий раз, когда становится жесткой.
+1 для рисования все это :) – Kamarey
Ха-ха, я рад, что мои работы можно оценить. – Giffyguy
Этот вопрос не вписывается в формат Q & A stackoverflows. «Какие хорошие альтернативы» уже предполагает, что нет единого правильного ответа. Там много разных способов и мнений. –