Heim > Backend-Entwicklung > C++ > Warum funktioniert die Kovarianz nicht mit Werttypen in C#?

Warum funktioniert die Kovarianz nicht mit Werttypen in C#?

Linda Hamilton
Freigeben: 2025-01-30 21:11:10
Original
830 Leute haben es durchsucht

Why Doesn't Covariance Work with Value Types in C#?

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!

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