Je me sens comme je l'ai sauté une classe C# ou deux, mais voici mon dilemme:C# abstrait héritage classe champ statique
J'ai une classe abstraite dont je tire plusieurs classes d'enfants.
Je sais avec certitude que pour chacune des classes enfants, je vais avoir un constructeur qui a besoin d'un certain objet statique en tant que modèle et cet objet sera différent pour chacune des classes enfants. Ma première approche consistait à créer un objet statique public dans la classe parente abstraite, puis, avant de commencer à créer des instances des classes enfants, je le modifiais pour chacun d'entre eux, mais il s'avère que ne fait en réalité qu'un seul objet statique, pour la classe abstraite, et chacune de ses classes enfant l'utilise.
Comment pourrais-je résoudre le problème?
Pour être plus précis, voici le pseudo-code:
La classe abstraite parent:
abstract class AbstractClass
{
static public ModelObject Model;
...
}
Une des classes d'enfants:
class Child : AbstractClass
{
...
public Child()
{
this.someField = Model.someField;
}
}
EDIT:
Le Le modèle doit être membre de la classe "ModelObject", il ne doit PAS être un singleton ou un anythi ng d'autre.
EDIT2:
Pour être encore plus précis, j'ai choisi cette mise en œuvre pour un jeu d'échecs: J'ai une classe abstraite pour les pièces d'échecs et les classes d'enfants représentent les pièces en béton du jeu: pions, chevaliers , etc. La classe abstraite hérite de MeshMatObject, une classe qui représente les objets 3d génériques avec les fonctionnalités de base, comme les rotations, les maillages, les matériaux, les textures etc. Elle définit des méthodes abstraites pour les pièces de jeu d'échecs, comme GetPossibleMoves(). L'objet Model dont je parlais plus haut est un membre de MeshMatObject et, à mon avis, devrait être défini en dehors de la classe une seule fois et ensuite utilisé pour toutes les pièces. Je veux dire: par exemple tous les pions ont le même maillage et la même texture, donc je ne vois pas l'intérêt de donner un modèle en tant que paramètre chaque fois que vous voulez faire un pion.
De quelle manière AbstractClass doit-il accéder au modèle? – dtb
Vous devriez envisager de passer une instance Model aux constructeurs de vos sous-classes au lieu d'utiliser un tel champ statique. – Trillian
Je suis d'accord avec Trillian. Avoir le modèle statique viole vraiment l'esprit de l'encapsulation ici. –