Heim >Backend-Entwicklung >C++ >Wie kann ich generische Typen mit parametrisierten Konstruktoren in C# instanziieren?
Angenommen, Sie haben eine generische Methode, die einen generischen Typ akzeptiert, und Sie möchten eine Instanz dieses Typs mit bestimmten Konstruktorparametern instanziieren. Allerdings erfordert der Konstruktor des Typs einen Parameter, und Sie wissen nicht, ob Sie das können.
Der folgende Codeausschnitt zeigt einen Versuch, ein Fruchtobjekt in einer generischen Methode zu erstellen:
<code class="language-csharp">public void AddFruit<T>() where T : BaseFruit { BaseFruit fruit = new T(weight); /*new Apple(150);*/ fruit.Enlist(fruitManager); }</code>
Dieser Ansatz schlägt möglicherweise fehl, weil BaseFruit
es keinen parameterlosen Konstruktor gibt. Um das Gewicht der Frucht anzugeben, ist ein ganzzahliger Parameter erforderlich.
Um dieses Problem zu lösen, stellt C# die Klasse Activator
bereit. Sie können eine Instanz eines Typs mit der Methode Activator.CreateInstance
erstellen und ein Array von Objekten als Konstruktorargument übergeben:
<code class="language-csharp">return (T)Activator.CreateInstance(typeof(T), new object[] { weight });</code>
Beachten Sie, dass die Verwendung der T
-Einschränkung für new()
nur sicherstellt, dass der Compiler zur Kompilierungszeit nach öffentlichen parameterlosen Konstruktoren sucht. Der eigentliche Code, der zum Erstellen des Typs verwendet wird, wird von der Klasse Activator
verarbeitet.
Während dieser Ansatz es Ihnen ermöglicht, einen Typ mit einem parametrisierten Konstruktor zu instanziieren, müssen Sie sicherstellen, dass der spezifische Konstruktor in der Typdefinition vorhanden ist. Wenn Sie sich auf diesen Ansatz verlassen, deutet dies möglicherweise auf potenzielle Code-Gerüche hin und schlägt vor, dass Sie andere Designoptionen erkunden sollten.
Das obige ist der detaillierte Inhalt vonWie kann ich generische Typen mit parametrisierten Konstruktoren in C# instanziieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!