概要 Ver. 4.0 C# 4.0 で、ジェネリクスの型引数に共変性・反変性を持たせることが可能になりました。 (共変性・反変性という言葉の意味は「covariance と contravariance」参照。) ジェネリックの共変性・反変性 ジェネリクスの共変性・反変性というものがどういうものかというのを説明する前に、まず背景を。 ジェネリックコレクションに関して、昔から以下のようなことをしたいという要望がありました。 List<string> strings = {"aa", "bb", "cc"}; List<object> objs = strings; これを認めてしまうと何がまずいかというと、 以下のような不正な値の書き換えが起こり得る。 // strings と objs は同じオブジェクト objs[0] = 5; // int に書き換えられたらまずい string s