Heim > Backend-Entwicklung > C++ > Können generische Typen mit parametrisierten Konstruktoren in C# instanziiert werden?

Können generische Typen mit parametrisierten Konstruktoren in C# instanziiert werden?

Barbara Streisand
Freigeben: 2025-01-09 12:17:41
Original
721 Leute haben es durchsucht

Generische C#-Typen und Instanziierung parametrisierter Konstruktoren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

Dieser Ansatz wird jedoch im Allgemeinen nicht empfohlen, da er zu Codegerüchen im Zusammenhang mit Konstruktoranforderungen in generischen Typen führen kann.

Can Generic Types with Parameterized Constructors Be Instantiated in C#?

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage