Injizieren von Parametern in generische Konstruktorinstanzen
Im Kontext einer generischen Methode, die das Erstellen einer Instanz eines bestimmten Typs erfordert, stellt sich die Frage : Wie können wir mit Situationen umgehen, in denen der Konstruktor für diesen Typ einen Parameter erfordert? Stellen Sie sich einen Fall vor, in dem BaseFruit einen Konstruktor besitzt, der eine ganzzahlige Gewichtung akzeptiert. Können wir eine Frucht innerhalb einer generischen Methode auf folgende Weise instanziieren:
public void AddFruit<T>() where T: BaseFruit { BaseFruit fruit = new T(weight); // new Apple(150) fruit.Enlist(fruitManager); }
Im bereitgestellten Beispiel können wir einen Versuch beobachten, eine Apple-Instanz mit einer Gewichtung von 150 zu instanziieren. Dies ist jedoch bei diesem Ansatz nicht der Fall machbar, es sei denn, BaseFruit ist mit einem parameterlosen Konstruktor ausgestattet, der die nachträgliche Zuweisung von Mitgliedsvariablen ermöglicht. Leider kann sich dieser Ansatz in praktischen Szenarien als unpraktisch erweisen.
Um dieses Problem anzugehen, können wir die Activator-Klasse nutzen, wie im folgenden vereinfachten Beispiel gezeigt:
return (T)Activator.CreateInstance(typeof(T), new object[] { weight });
Beachten Sie, dass „employing Die new()-Einschränkung für T dient ausschließlich dazu, sicherzustellen, dass der Compiler während der Kompilierung die Existenz eines öffentlichen, parameterlosen Konstruktors überprüft. Die Activator-Klasse ist letztendlich für den Typerstellungsprozess verantwortlich.
Es ist wichtig, die Existenz des spezifischen Konstruktors zu überprüfen, den Sie verwenden möchten. Darüber hinaus lohnt es sich zu überlegen, ob eine solche Anforderung notwendig ist, da sie möglicherweise auf ein Code-Design-Problem hinweist, das in aktuellen C#-Implementierungen vermieden werden könnte.
Das obige ist der detaillierte Inhalt vonWie kann ich Parameter in generische Konstruktorinstanzen in C# einfügen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!