Jakie są dobre alternatywy dla wielokrotnego dziedziczenia w .NET?

Wystąpił problem z moją hierarchią klas w aplikacji WPF. Jest to jeden z tych problemów, w którym łączą się dwa drzewa dziedziczenia i nie można znaleźć żadnego logicznego sposobu na sprawne działanie dziedziczeniabez wielokrotne dziedziczenie. Zastanawiam się, czy ktoś ma jakieś jasne pomysły na działanie tego rodzaju systemu, bez uniemożliwiania śledzenia lub debugowania.

Jestem inżynierem niskiego szczebla, więc moją pierwszą myślą jest zawsze: „Och! Po prostu napiszę niektóre z tych klas w natywnym C ++ i odwołaję się do nich na zewnątrz! Wtedy będę mógł mieć całą moją old-schoolową zabawę OO!” Niestety, to nie pomaga, gdy trzeba dziedziczyć po zarządzanych kontrolkach ...

Pozwólcie, że pokażę fragment mojego obecnego diagramu klas rzutowanych:

 ____________________________________      _____________________________________
| CustomizableObject                 |    | System.Windows.Controls.UserControl |
|____________________________________|    |_____________________________________|
|   string XAMLHeader()              |                        ▲
|   string XAMLFooter()              |◄--┐                    |
|   CustomizableObject LoadObject()  |   \                    |
|   <Possible other implementations> |    \                   |
|____________________________________|     \                  |
         ▲                      ▲           \                 |
         |                      |            \                |
         |                      |             \               |
 _________________    ______________________   \    _____________________
| SpriteAnimation |  | SpriteAnimationFrame |  └---| CustomizableControl |
|_________________|  |______________________|      |_____________________|
                                                      ▲             ▲
                                                      |             |
                                                      |             |
                                                  ________    _____________
                                                 | Sprite |  | SpriteFrame |
                                                 |________|  |_____________|

Problem jest całkiem jasny: oddzielenie drzew obiektów CustomizableObject i CustomizableControl --- oraz wstawienie UserControl w jednym, ale nie w obu drzewach.

Nie ma sensu przenosić implementacji CustomizableObject do jej klas pochodnych, ponieważ implementacja nie różni się w zależności od klasy. Co więcej, byłoby bardzo mylące, gdyby był on wielokrotnie wdrażany. Więc naprawdę nie chcę tworzyć interfejsu CustomizableObject. Rozwiązanie interfejsu nie ma dla mnie żadnego sensu. (Interfejsy mająnigdy szczerze mówiąc, naprawdę miało dla mnie dużo sensu ...)

Więc powtarzam, każdy ma jakieś jasne pomysły? To prawdziwa marynata. Chciałbym dowiedzieć się więcej o tworzeniu interfejsów z moim drzewem obiektów, a nie przeciwko niemu. Robię ten prosty silnik sprite używając WPF i C # jako solidnego ćwiczenia, bardziej niż cokolwiek innego. Jest to bardzo łatwe do rozwiązania w C ++ - ale muszę wymyślić, jak rozwiązać te problemy w zarządzanym środowisku, zamiast rzucać ręce w powietrze i wracać do Win32, gdy tylko stanie się to trudne.

questionAnswers(6)

yourAnswerToTheQuestion