Heim >Backend-Entwicklung >C++ >Wie kann ich Polymorphismus mit offenen generischen Typen in C# erreichen?
Beim Umgang mit generischem Code stoßen Sie normalerweise auf Szenarien, in denen Sie verschiedene Datentypen verarbeiten müssen. Der generische Polymorphismus von C# weist jedoch Einschränkungen auf, wenn es um den Umgang mit offenen generischen Typen geht.
Bedenken Sie den folgenden Code:
<code class="language-csharp">public abstract class Data<T> { } public class StringData : Data<string> { } public class DecimalData : Data<decimal> { } List<Data<T>> dataCollection = new List<Data<T>>(); // 错误:缺少类型参数 dataCollection.Add(new DecimalData()); dataCollection.Add(new StringData());</code>
In diesem Beispiel möchten Sie eine Liste erstellen, die Instanzen verschiedener Datenuntertypen enthalten kann. Die letzte Zeile schlägt jedoch mit einem Compilerfehler fehl, da offene generische Typen (z. B. Daten) die Angabe von Typparametern erfordern.
C# unterstützt keinen echten Polymorphismus für offene generische Typen. Um dieses Problem zu lösen, haben Sie mehrere Möglichkeiten:
Erstellen Sie eine Liste von Objekten:
<code class="language-csharp"> List<object> dataCollection = new List<object>(); dataCollection.Add(new DecimalData()); dataCollection.Add(new StringData());</code>
Dieser Ansatz verliert jedoch die Typsicherheit und erfordert eine explizite Konvertierung beim Zugriff auf die Daten.
Verwenden Sie nicht generische Schnittstellen oder abstrakte Klassen:
<code class="language-csharp"> public interface IData { void SomeMethod(); } public abstract class Data<T> : IData { public void SomeMethod() { } } List<IData> dataCollection = new List<IData>(); dataCollection.Add(new DecimalData()); dataCollection.Add(new StringData());</code>
Dies ermöglicht nicht generische Operationen an Listenelementen, allerdings auf Kosten einer gewissen Generizität und Typsicherheit.
Es ist wichtig, die Einschränkungen und Kompromisse bei der Verwendung offener generischer Typen in C# zu verstehen und die Lösung auszuwählen, die Ihren spezifischen Anforderungen am besten entspricht.
Das obige ist der detaillierte Inhalt vonWie kann ich Polymorphismus mit offenen generischen Typen in C# erreichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!