概要 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
![ジェネリクスの共変性・反変性(C# によるプログラミング入門)](https://cdn-ak-scissors.b.st-hatena.com/image/square/4d1b2b57fc676d21e7f59f354364abeac0ea062e/height=288;version=1;width=512/https%3A%2F%2Fufcpp.net%2Fimages%2Flogo_4.jpg)