Heim > Backend-Entwicklung > C++ > Kann die generische Typinstanziierung Konstruktorargumente in C# verarbeiten?

Kann die generische Typinstanziierung Konstruktorargumente in C# verarbeiten?

Mary-Kate Olsen
Freigeben: 2025-01-09 12:11:42
Original
178 Leute haben es durchsucht

Can Generic Type Instantiation Handle Constructor Arguments in C#?

Instanziierung generischer C#-Typen und Konstruktorparameter

Beim Erstellen eines generischen Typs stellt sich häufig die Frage: Wie instanziiert man einen Konstruktor, der Parameter in einer generischen Methode erfordert? Beispielsweise verfügt die Klasse BaseFruit über einen Konstruktor, der einen Gewichtsparameter vom Typ Integer empfängt.

Wie kann man Früchte mit einem bestimmten Gewicht in einer generischen Methode instanziieren?

Der folgende Code versucht, eine Fruchtinstanz mit einem angegebenen Gewicht 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>
Nach dem Login kopieren

Dieser Ansatz ist nur möglich, wenn BaseFruit über einen parameterlosen Konstruktor verfügt, der die Eigenschaften anschließend über Mitgliedsvariablen ändert. In realen Anwendungen ist dies jedoch möglicherweise nicht praktikabel.

Alternative:

kann die Klasse Activator verwenden:

<code class="language-csharp">return (T)Activator.CreateInstance(typeof(T), new object[] { weight });</code>
Nach dem Login kopieren

In diesem Fall stellt die T-Einschränkung für new() sicher, dass zur Kompilierungszeit ein öffentlicher Parameterloser Konstruktor vorhanden ist und die Activator-Klasse für die eigentliche Typerstellung verantwortlich ist.

Hinweis:

Während dieses Szenario eine Problemumgehung darstellt, muss die Existenz des spezifischen Konstruktors im Code überprüft werden. Darüber hinaus kann die Verwendung dieses Ansatzes auf ein Problem auf Codeebene hinweisen und sollte in aktuellen Versionen von C# vermieden werden.

Das obige ist der detaillierte Inhalt vonKann die generische Typinstanziierung Konstruktorargumente in C# verarbeiten?. 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