Siento que me he saltado una clase C# o dos, pero aquí está mi dilema:C# campo estático clase abstracta herencia
tengo una clase abstracta de la que derivo múltiples clases hijas.
Sé con certeza que para cada una de las clases secundarias tendré un constructor que necesita un determinado objeto estático como modelo y este objeto será diferente para cada una de las clases secundarias.
Mi primer enfoque fue hacer un objeto público estático en la clase primaria abstracta y luego, antes de comenzar a crear cualquier instancia de las clases secundarias, lo modificaría para cada una de ellas, pero resulta que de esta manera de hecho solo hace UNO objeto estático, para la clase abstracta, y cada una de sus clases infantiles lo usa.
¿Cómo podría solucionar el problema?
Para ser más exactos, aquí está el pseudocódigo:
La clase abstracta padres:
abstract class AbstractClass
{
static public ModelObject Model;
...
}
Una de las clases hijas:
class Child : AbstractClass
{
...
public Child()
{
this.someField = Model.someField;
}
}
EDIT:
El El modelo debe ser miembro de la clase "ModelObject", NO debe ser un singleton o anythi ng else.
Edit2:
Para ser aún más exacta, he elegido esta implementación de una partida de ajedrez: Tengo una clase abstracta de las piezas de ajedrez y las clases hijas representan las piezas de hormigón del juego: peones, caballeros , etcétera.
La clase abstracta hereda de MeshMatObject, una clase que representa objetos genéricos 3d con la funcionalidad básica, como rotaciones, mallas, materiales, texturas, etc., y define métodos abstractos para piezas de ajedrez, como GetPossibleMoves().
El objeto Modelo del que hablaba anteriormente es miembro de MeshMatObject y, en mi opinión, debería definirse fuera de la clase solo una vez y luego usarse para todas las piezas. Quiero decir: por ejemplo, todos los peones tienen la misma malla y textura, por lo que no veo el sentido de dar un modelo como parámetro cada vez que quiera hacer un peón.
¿De qué manera necesita AbstractClass acceder al Modelo? – dtb
Debería considerar pasar una instancia de modelo a los constructores de sus subclases en lugar de usar dicho campo estático. – Trillian
Estoy de acuerdo con Trillian. Tener el modelo estático realmente está violando el espíritu de encapsulación aquí. –