Je me suis reculé dans un coin. Voici une version simplifiée de ce que j'ai (en C#):Passer des informations à un constructeur sans utiliser de paramètre en C#
class OuterClass
{
private class BadClass
{
private int Data;
public BadClass()
{
Data = 0;
...
}
}
T Build<T>(Object Input)
{
T x = new T();
...
return x;
}
void SomeMethod()
{
BadClass a = Build<BadClass>(anObject);
...
}
...
}
Le problème que j'ai est que je dois maintenant changer la valeur initiale des données en fonction de l'instance de OuterClass qui crée l'instance BadClass. Normalement, je voudrais simplement utiliser un constructeur BadClass qui prend un paramètre:
public BadClass(int Data)
{
this.Data = Data;
...
}
Mais j'utiliser BadClass dans plusieurs types génériques, donc je dois avoir un constructeur BadClass parameterless. Dommage que je ne peux pas faire quelque chose comme ceci:
Build<BadClass(5)>(anObject);
Alors, comment puis-je donner un constructeur d'informations d'exécution lorsque je ne peux pas passer des paramètres dans le constructeur?
Est-il possible de créer une instance d'exécution d'un type BadClass, de lui donner les informations dont il a besoin, puis de l'utiliser dans mes types génériques?
EDIT: je liste comme un exemple type générique, mais qui n'a pas exprimer pleinement la profondeur de mon dilemme ...
Je peux créer un test Build pour appeler une fonction init si je travaille avec une BadClass, mais c'est très hacky. J'espère trouver une façon un peu moins laide de s'y prendre. Lorsque vous créez le List<BadClass>
, vous ne créez aucune instance BadClass.
Pourquoi ne pas surcharger le constructeur? – jle
Je n'ai toujours aucune idée de ce que vous essayez d'accomplir. Le fait que vous passiez un objet à la méthode Build me semble très poisseux. Y a-t-il un modèle que vous essayez de mettre en œuvre? –
Ceci est une version simplifiée. J'essaie juste d'expliquer les contraintes avec lesquelles je travaille. Il s'agit d'un motif d'usine modifié. J'ai plusieurs classes qui ont la même classe de base. J'utilise l'usine (Build ci-dessus) pour générer l'instance appropriée d'une classe. C'est évidemment plus complexe que ce que je montre ici.L'objet qui est passé dans l'usine est un nœud dans un arbre binaire, l'usine détermine où la BadClass doit être insérée dans l'arbre et fait d'autres choses. Il y a plusieurs fonctions d'usine différentes. Je peux utiliser un constructeur en deux étapes, mais ce sera moche. – oillio