In diesem Artikel wird untersucht, wie ein generischer Typ mit einem parametrisierten Konstruktor in C# instanziiert wird.
Angenommen, es gibt eine generische Methode zum Hinzufügen von Früchten zum Obstmanager:
<code class="language-csharp">public void AddFruit<T>() where T : BaseFruit { BaseFruit fruit = new T(weight); // 例如:new Apple(150) fruit.Enlist(fruitManager); }</code>
wobei die Klasse BaseFruit
einen Konstruktor hat, der eine Ganzzahl weight
als Parameter akzeptiert.
Frage: Können wir in dieser generischen Methode ein Fruchtobjekt mit einem bestimmten Gewicht instanziieren?
Antwort: Ja, aber nicht direkt wie im Beispiel. Es gibt zwei Methoden:
1. Verwenden Sie die Activator-Klasse:
Mit der Klasse Activator
können wir ein Objekt vom Typ T
dynamisch instanziieren und die erforderlichen Parameter als Array von Objekten übergeben:
<code class="language-csharp">return (T)Activator.CreateInstance(typeof(T), new object[] { weight });</code>
Beachten Sie, dass dies erfordert, dass die Klasse BaseFruit
über einen öffentlichen, parameterlosen Konstruktor verfügt, den der Compiler überprüfen kann. In Wirklichkeit wird jedoch die Klasse Activator
zum Erstellen der Instanz verwendet.
2. Verwenden Sie generische Parameter mit dem Konstruktor:
C# schränkt die Verwendung von Konstruktoren ein, die Parameter zum Instanziieren generischer Typen erfordern. Um dieses Problem zu umgehen, können Sie einen generischen Parameter mit demselben Namen wie der Typ erstellen und den Konstruktorparameter in seiner Definition angeben:
<code class="language-csharp">public void AddFruit<T>(T fruit) where T : new(int weight) { fruit.Enlist(fruitManager); } // 使用示例: AddFruit(new Apple(150));</code>
Dieser Ansatz wird jedoch im Allgemeinen nicht empfohlen, da er zu Codegerüchen im Zusammenhang mit Konstruktoranforderungen in generischen Typen führen kann.
Das obige ist der detaillierte Inhalt vonKönnen generische Typen mit parametrisierten Konstruktoren in C# instanziiert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!