„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Warum funktioniert die Kovarianz nicht mit Werttypen in C#?

Warum funktioniert die Kovarianz nicht mit Werttypen in C#?

Gepostet am 2025-03-25
Durchsuche:502

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

c# Kovarianz und Kontravarianz: Werttypenbeschränkungen

Die iEnumerable Schnittstelle in C# -Abschnittkovarianz, sodass die Zuordnung abgeleiteter Typ Referenzen zu Referenzen des Basistyps ermöglicht. Dies gilt jedoch nicht für Werttypen. Zuweisen iEnumerable an iEnumerable führt zu einem Kompilierungsfehler.

Diese Einschränkung stammt aus Boxen und Entbinden. Das Boxen wandelt einen Werttyp in einen Referenztyp um ( Object ), während das Unboxing dies umkehrt. iEnumerable 's Typparameter t funktioniert nur mit Referenztypen. Zuweisen eines iEnumerable eines Werttyps zu einem iEnumerable erfordert das Boxen, das für Werttypen nicht implizit unterstützt wird.

.

Kovarianz und Kontravarianz stützen sich auf konsequente Wertvertretung über Konvertierungen hinweg. Werttypen behalten diese Konsistenz jedoch nicht bei. Boxen ändert ihre Darstellung, die möglicherweise zu Identitätsverlust und -instabilität führt, und verletzt die Prinzipien der kovarianten und kontravarianten Aufgaben.

Eric Lippers Schriften über Repräsentation und Identität heben, dass diese Konvertierungen die Erhaltung der Identität erfordern. Da der Boxprozess von Werttypen diese Erhaltung durchbricht, sind sie mit Kovarianz und Kontratarianz unvereinbar.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3