Was sind einige gute Alternativen zur Mehrfachvererbung in .NET?

Ich bin in einer WPF-Anwendung auf ein Problem mit meiner Klassenhierarchie gestoßen. Es ist eines dieser Probleme, bei denen zwei Vererbungsbäume zusammengeführt werden und Sie keine logische Möglichkeit finden, Ihre Vererbung reibungslos funktionieren zu lassenohne Mehrfachvererbung. Ich frage mich, ob jemand gute Ideen hat, um diese Art von System zum Laufen zu bringen, ohne es unmöglich zu machen, zu folgen oder Fehler zu beheben.

Ich bin ein Low-Level-Ingenieur, daher lautet mein erster Gedanke immer: "Oh! Ich schreibe nur einige dieser Klassen in nativem C ++ und verweise sie von außen! Dann kann ich all meinen OO-Spaß der alten Schule haben!" Leider hilft dies nicht, wenn Sie von verwalteten Steuerelementen erben müssen ...

Gestatten Sie mir, einen Ausschnitt aus meinem aktuellen projizierten Klassendiagramm anzuzeigen:

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

Das Problem ist ziemlich klar: Die Trennung der Objektbäume CustomizableObject und CustomizableControl --- und das Einfügen von UserControl in einen, aber nicht in beide Bäume.

Es ist praktisch nicht sinnvoll, die Implementierung von CustomizableObject in die abgeleiteten Klassen zu verschieben, da die Implementierung nicht von Klasse zu Klasse variiert. Außerdem wäre es sehr verwirrend, wenn es mehrmals implementiert würde. Ich möchte CustomizableObject also wirklich nicht zu einer Schnittstelle machen. Die Schnittstellenlösung macht für mich keinen Sinn. (Schnittstellen habennoch nie hat mir echt viel Sinn gemacht, um ehrlich zu sein ...)

Also sage ich nochmal, hat jemand gute Ideen? Das ist eine echte Gurke. Ich möchte mehr darüber erfahren, wie ich Interfaces mit meinem Objektbaum arbeiten lasse, anstatt dagegen. Ich mache diese einfache Sprite-Engine mit WPF und C # als solide Übung, mehr als alles andere. Dies ist in C ++ so einfach zu lösen - aber ich muss herausfinden, wie diese Probleme in einer verwalteten Umgebung gelöst werden können, anstatt meine Hände in die Luft zu werfen und zu Win32 zurückzukehren, wenn es schwierig wird.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage