Warum Kovarianz und Kontravarianz den Wertetyp nicht unterstützen

IEnumerable<T> istCo-Variante Der Wertetyp wird jedoch nicht unterstützt, sondern nur der Referenztyp. Der folgende einfache Code wurde erfolgreich kompiliert:

IEnumerable<string> strList = new List<string>();
IEnumerable<object> objList = strList;

Aber abwechselnstring zuint wird kompilierter Fehler erhalten:

IEnumerable<int> intList = new List<int>();
IEnumerable<object> objList = intList;

Der Grund wird in erklärtMSDN:

Die Abweichung gilt nur für Referenztypen. Wenn Sie einen Werttyp für einen Variantentypparameter angeben, ist dieser Typparameter für den resultierenden konstruierten Typ invariant.

Ich habe gesucht und festgestellt, dass einige Fragen den Grund genannt habenBoxen zwischen Werttyp und Referenztyp. Aber es klärt mich immer noch nicht sonderlich auf, warum Boxen der Grund ist?

Könnte jemand bitte eine einfache und detaillierte Erklärung geben, warum Kovarianz und Kontravarianz den Wertetyp nicht unterstützen und wieBoxen wirkt sich das aus?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage