IEnumerable<T>
あるコバリアントが、それは値型、ちょうどのみ参照型をサポートしていません。以下の単純なコードは正常にコンパイルされています。
IEnumerable<string> strList = new List<string>();
IEnumerable<object> objList = strList;
しかし、からstring
に変更するint
と、コンパイルエラーが発生します。
IEnumerable<int> intList = new List<int>();
IEnumerable<object> objList = intList;
分散は参照型にのみ適用されます。バリアント型パラメーターに値の型を指定すると、その型パラメーターは、結果の構成型に対して不変になります。
私が検索したところ、値の型と参照の型の間のボクシングが原因であると述べたいくつかの質問が見つかりました。しかし、ボクシングが理由である理由はまだ私の心をはっきりさせませんか?
共分散と反変が値タイプをサポートしない理由と、ボクシングがこれにどのように影響するかについて、簡単で詳細な説明を誰かに教えてもらえますか?