Heim >Backend-Entwicklung >C++ >Wie kann ich generische Typen mit parametrisierten Konstruktoren in C# instanziieren?

Wie kann ich generische Typen mit parametrisierten Konstruktoren in C# instanziieren?

Susan Sarandon
Susan SarandonOriginal
2025-01-09 12:27:49973Durchsuche

Generische C#-Typen und Instanziierung parametrisierter Konstruktoren

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.

How Can I Instantiate Generic Types with Parameterized Constructors in C#?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn