C# 4.0 の Generic Variance は、例外なく次のように記述できるように実装されています (これは C# 3.0 で発生することです)。
List<int> intList = new List<int>();
List<object> objectList = intList;
[機能しない例: Jon Skeet の回答を参照]
私は最近、Jon Skeet が Generic Variance の優れた概要を説明した会議に出席しましたが、完全に理解できているかどうかはわかりません.contra と co-variance に関してはin
とout
キーワードの重要性を理解していますが、私は舞台裏で何が起こっているのか興味があります。
このコードが実行されると、CLR は何を認識しますか? を暗黙的に変換するのList<int>
か、List<object>
それとも派生型から親型に変換できるようになったのか、それとも単に組み込まれているだけなのか?
興味深いことに、これが以前のバージョンで導入されなかったのはなぜですか?主な利点は何ですか?つまり、実際の使用法ですか?
Generic Variance のこの投稿に関する詳細情報(ただし、質問は非常に時代遅れであり、実際の最新の情報を探しています)