WPF アプリケーションで、クラス階層に少し問題が発生しました。これは、2 つの継承ツリーがマージされている問題の 1 つであり、多重継承なしでは継承をスムーズに機能させるための論理的な方法を見つけることができません。追跡やデバッグを不可能にすることなく、この種のシステムを機能させるための素晴らしいアイデアを誰かが持っているかどうか疑問に思っています。
私は低レベルのエンジニアなので、最初に考えるのはいつも「ああ、これらのクラスのいくつかをネイティブ C++ で記述して、外部から参照するだけだ!そうすれば、昔ながらの OO のすべてを楽しむことができる!」ということです。残念ながら、管理されたコントロールから継承する必要がある場合、これは役に立ちません...
現在投影されているクラス図のスニペットを表示させてください。
____________________________________ _____________________________________
| 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 に戻るのではなく、管理された環境でこれらの問題を解決する方法を理解する必要があります。