Me he encontrado con un problema con la jerarquía de mi clase, en una aplicación WPF. Es uno de esos problemas en los que tiene dos árboles de herencia fusionándose, y no puede encontrar ninguna forma lógica de hacer que su herencia funcione sin problemas sin herencia múltiple. Me pregunto si alguien tiene ideas brillantes para que funcione este tipo de sistema, sin que sea imposible seguirlo o depurarlo.¿Cuáles son algunas buenas alternativas a la herencia múltiple en .NET?
Soy un ingeniero de bajo nivel, así que lo primero que pienso es: "¡Oh, escribiré algunas de estas clases en C++ nativo y las referiré a ellas desde el exterior! Entonces puedo tener toda mi vieja escuela OO diversión! " Por desgracia, esto no ayuda cuando se necesita para heredar de controles administrados ...
me permitirá mostrar un fragmento de mi diagrama actual clase proyectado:
____________________________________ _____________________________________
| CustomizableObject | | System.Windows.Controls.UserControl |
|____________________________________| |_____________________________________|
| string XAMLHeader() | ▲
| string XAMLFooter() |◄--┐ |
| CustomizableObject LoadObject() | \ |
| <Possible other implementations> | \ |
|____________________________________| \ |
▲ ▲ \ |
| | \ |
| | \ |
_________________ ______________________ \ _____________________
| SpriteAnimation | | SpriteAnimationFrame | └---| CustomizableControl |
|_________________| |______________________| |_____________________|
▲ ▲
| |
| |
________ _____________
| Sprite | | SpriteFrame |
|________| |_____________|
El problema es bastante claro: la separación de los árboles de objetos CustomizableObject y CustomizableControl --- y la inserción de UserControl en uno, pero no en ambos, de los árboles.
No tiene ningún sentido práctico mover la implementación de CustomizableObject a sus clases derivadas, ya que la implementación no varía según la clase. Además, sería realmente confuso tenerlo implementado muchas veces. Entonces realmente no quiero hacer de CustomizableObject una interfaz. La solución de interfaz no tiene ningún sentido para mí. (Las interfaces tienen nunca realmente tiene mucho sentido para mí, para ser honesto ...)
Así que vuelvo a decir, ¿alguien tiene alguna idea brillante? Este es un verdadero pepinillo. Me gustaría obtener más información sobre cómo hacer que las interfaces funcionen CON mi árbol de objetos, en lugar de hacerlo en contra de él. Estoy haciendo este motor de sprite simple usando WPF y C# como un ejercicio sólido, más que nada. Esto es tan fácil de resolver en C++, pero necesito resolver cómo resolver estos problemas en un entorno administrado, en lugar de lanzar las manos al aire y volver corriendo a Win32 cada vez que las cosas se ponen difíciles.
+1 por dibujar todo esto :) – Kamarey
Jaja, me alegro de que mi obra de arte pueda ser apreciada. – Giffyguy
Esta pregunta no encaja bien en el formato Q & A de stackoverflows. "Cuáles son algunas buenas alternativas" ya supone que no hay una sola respuesta correcta. Hay muchas formas y opiniones diferentes. –