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.
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