.NET Framework 4.0 представляет safe co / contra-variance. IList<T>
и ICollection<T>
имеют T
во входных и выходных позициях, в то время как IEnumerable<T>
имеет T
только в выходных позициях , а IComparable<T>
имеет T
только во входных позициях .
Предположим, IList<T>
поддерживаемая дисперсия типов:
static void FailingMethod(IList<object> list) {
list[0] = 5;
}
static void Test() {
var a = new List<string>();
a[0] = "hello";
FailingMethod(a); // if it was variant, this method call would be unsafe
}