c# Kovarianz und Kontravarianz: Werttypbeschränkungen
Die Kovarianz- und Kontravarianzfunktionen vonc#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>
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.
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!