Heim > Backend-Entwicklung > C++ > Warum arbeiten Kovarianz und Kontravarianz nicht mit Werttypen in C#?

Warum arbeiten Kovarianz und Kontravarianz nicht mit Werttypen in C#?

Susan Sarandon
Freigeben: 2025-01-30 21:16:10
Original
114 Leute haben es durchsucht

Why Don't Covariance and Contravariance Work with Value Types in C#?

c# Kovarianz und Kontravarianz: Werttypbeschränkungen

Die Kovarianz- und Kontravarianzfunktionen von

c#ermöglichen flexible Typzuweisungen. Diese Funktionen sind jedoch begrenzt, wenn sie mit Werttypen arbeiten.

IEnumerable<T> zeigt eine Kovarianz, die die Zuordnung einer T -Referation auf eine Objektreferenz ermöglicht. Dies erstreckt sich nicht auf Werttypen, wie dargestellt:

<code class="language-csharp">IEnumerable<string> strList = new List<string>();
IEnumerable<object> objList = strList;  // Compiles fine

IEnumerable<int> intList = new List<int>();
IEnumerable<object> objList = intList;  // Compilation error</code>
Nach dem Login kopieren

Dieser Unterschied stammt aus dem Boxen. Das Zuweisen eines Werttyps einer Referenzvariablen erfordert das Boxen, das ein neues mit Haufen zugeerdigter Objekt erstellt. Dies fügt Overhead hinzu und führt potenzielle Laufzeitprobleme ein.

Mit der Kovarianz kann die gemeinsame Sprachlaufzeit (CLR) die Erhaltung der Box -Wertidentität nicht garantieren. Beispielsweise garantiert eine Methode, die ein object[] und das Ändern eines Elements annimmt IEnumerable<int> Folglich werden Kovarianz und Kontravarianz in C#nicht unterstützt, um die Sicherheit der Typ zu erhalten und Fehler im Zusammenhang mit Boxen zu verhindern.

wird nicht unterstützt.

Das obige ist der detaillierte Inhalt vonWarum arbeiten Kovarianz und Kontravarianz 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