c# Kovarianz und Kontravarianz: Werttypbeschränkungen
Die IEnumerable<T>
-Schrobtikeln in C# zeigt eine Kovarianz, die die Zuordnung abgeleiteter Referenzen zu Referenzen des Basistyps ermöglicht. Dies gilt jedoch nicht für Werttypen. Das Zuweisen von IEnumerable<int>
zu IEnumerable<object>
führt zu einem Kompilierungsfehler.
Diese Einschränkung stammt aus Boxen und Unboxen. Das Boxing wandelt einen Werttyp in einen Referenztyp um (object
), während Unboxing dies umkehrt. Der Typ -Parameter IEnumerable<T>
T
funktioniert nur mit Referenztypen. Das Zuweisen eines IEnumerable
eines Werttyps zu einem IEnumerable<object>
erfordert das Boxen, das für Werttypen nicht implizit unterstützt wird.
Kovarianz und Kontravarianz beruhen auf konsequente Wertvertretung über Konversionen hinweg. Werttypen behalten diese Konsistenz jedoch nicht bei. Boxen ändert ihre Darstellung, die möglicherweise zu Identitätsverlust und -instabilität führt, und verstößt gegen die Prinzipien der kovarianten und kontravarianten Aufgaben.
Eric Lipperts Schriften zur Darstellung und Identität zeigen, dass diese Konvertierungen die Erhaltung der Identität erfordern. Da der Boxprozess von Werttypen diese Erhaltung durchbricht, sind sie mit Kovarianz und Kontravarianz unvereinbar.
Das obige ist der detaillierte Inhalt vonWarum funktioniert die Kovarianz nicht mit Werttypen in C#?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!