Heim >Backend-Entwicklung >C++ >Wie erstelle ich eine Liste offener generischer Typen (Klasse) in C#?

Wie erstelle ich eine Liste offener generischer Typen (Klasse) in C#?

Susan Sarandon
Susan SarandonOriginal
2025-01-11 08:30:10200Durchsuche

How to Create a List of Open Generic Types (Class) in C#?

So erstellen Sie eine Liste offener generischer Typen (Klasse) in C#

Beim Programmieren kann es vorkommen, dass Sie mehrere Datentypen in einer Sammlung verarbeiten müssen. In diesem Fall können Generika eine flexible Lösung bieten. Die Verwendung offener generischer Typen wie List führt jedoch manchmal zu Compilerfehlern.

Angenommen, Sie haben eine Klasse „Data“, die verschiedene Datentypen darstellt, z. B. StringData und DecimalData. Um eine Liste dieser verschiedenen Datentypen zu verwalten, können Sie versuchen, List wie folgt zu verwenden:

<code class="language-c#">List<Data> dataCollection = new List<Data>();</code>

Dieser Code lässt sich jedoch nicht kompilieren, da der Compiler sich darüber beschwert, dass der generische Typ „Data“ einen Typparameter erfordert. Dies liegt daran, dass der Compiler bei offenen generischen Typen die Typparameter beim Erstellen der Liste nicht ableiten kann.

Offene und geschlossene generische Typen verstehen

Um dieses Problem zu lösen, ist es wichtig, den Unterschied zwischen offenen und geschlossenen generischen Typen zu verstehen. Im Fall von List handelt es sich um einen offenen generischen Typ, was bedeutet, dass der Typparameter T unspezifiziert bleibt. Andererseits gibt ein geschlossener generischer Typ Typparameter wie List> an.

Erstellen Sie eine Liste geschlossener generischer Typen

Um eine Liste eines geschlossenen generischen Typs zu erstellen, müssen Sie beim Erstellen der Liste die Typparameter angeben. Zum Beispiel:

<code class="language-c#">List<Data<string>> stringDataCollection = new List<Data<string>>();
List<Data<decimal>> decimalDataCollection = new List<Data<decimal>>();</code>
Diese Listen können jetzt Instanzen von StringData bzw. DecimalData akzeptieren.

Einschränkungen des offenen generischen Typpolymorphismus

Leider gibt es in C# keinen direkten Mechanismus, um echten Polymorphismus offener generischer Typen zu erreichen. Das bedeutet, dass Sie keine Liste wie List> erstellen und darin verschiedene umschließende Typen wie Data

und Data speichern können. Dies ist eine Einschränkung im generischen Design von C#.

Alternative Methoden

Wenn Sie eine Sammlung mit Objekten unterschiedlichen Typs verwalten müssen, können Sie die folgenden Alternativen in Betracht ziehen:

    Verwenden Sie nicht generische Schnittstellen oder abstrakte Klassen, um öffentliches Verhalten zu definieren und Objekte bei Bedarf in den entsprechenden Typ umzuwandeln.
  • Verwenden Sie dynamische Programmierung, um die Flexibilität zu erhöhen, jedoch auf Kosten der Typensicherheit.
  • Verwenden Sie Bibliotheken von Drittanbietern, die möglicherweise erweiterte generische Funktionen bieten.

Das obige ist der detaillierte Inhalt vonWie erstelle ich eine Liste offener generischer Typen (Klasse) in C#?. 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