ich eine abstrakte Klasse namens FabrikErstellen Instanz eines generischen Typs, der einen Parameter eines sekundären generischen Typ nimmt
Die Fabrik hat eine Methode create()
public abstract class Factory<T, U>{
public T CreateModel(IDictionary<String, Object> parametersDictionary)
{
T toReturn;
if (ValidateDictionary(parametersDictionary) != true)
return null;
else
{
toReturn = new T(U);
}
return toReturn;
}}
In der else-Anweisung, ich will um eine Car-Instanz zu erstellen, die ein CarPart-Objekt nimmt, das ich von einem anderen Methodenaufruf erhalten würde. Diese Logik würde auf andere Factory-Subtypen angewendet werden, daher möchte ich diese Methode erben. Das Problem ist, dass ich die generische Car-Instanz nicht mit einem anderen allgemeinen Parameter erstellen kann.
Ich sah mich um und fand, dass ich die Aktivator-Klasse verwenden könnte.
(T) Activator.CreateInstance (typeof ( Car), args);
Dies scheint jedoch nur zu funktionieren, wenn Sie einen bestimmten Typ haben, den Sie dem Konstruktor geben möchten.
Ich habe auch versucht zu tun:
public abstract class Fabrik, wo T: new()
Aber das mich nicht an den Konstruktor jedes Argument analysieren ließ.
Wie kann ich diese abstrakte Klasse implementieren?
Edit1: verändert die Benennung für die Klärung
EDIT2: Zur Verdeutlichung U eine Struktur, die aproximatelly 20 notwendigen Parameter für die Erstellung von T. Um also einen neuen T erstellen enthält, ich brauche es ein U passieren Objekt, das alle 20 notwendigen Parameter einkapselt.
Was ist 'T'? Ich kann nur Typdefinitionen für 'Car' und' CarPart' sehen. Ich nehme an, 'T' sollte' Car' sein. – HimBromBeere
Frage ist auch nicht klar, wenn Sie Factory benötigen dann geben Sie es nur CarPart-Eingabe, und in CreateModel auflösen, welches Objekt möchten Sie zurückgeben - Factory sollte für Sie entscheiden, was es zurückgeben soll. – Vladimir
Können Sie 'Car's Konstruktor zeigen? Btw .: Ich glaube, Sie sind mit den Namen der Typparameter verwirrt. Ich schlage vor, dass Sie "T" und "U" für den generischen Parameter in Ihrer Factory-Class-Definition verwenden, und dann werden die Dinge klarer, da "Car" sowohl der Name des generischen Parameters als auch der Name eines existierenden Parameters zu sein scheint Klasse. – HimBromBeere