Эрик Мейер говорил со Скоттом Хансельманом о Reactive Framework в одном из последних подкастов Скотта, и одна из вещей, которые сказал Эрик, заключалась в том, что в .NET 4.0 IEnumerable ковариантен, а в .NET 3.5 IEnumerable - нет.
Это означает, что если у вас есть объект Banana
, который наследуется от Fruit
, вы можете присвоить банан переменной Fruit, но вы не можете передать IEnumerable
бананов методу, ожидающему фрукт IEnumerable в .NET 3.5, потому что IEnumerable не является ковариантным.
Из подкаста:
Если у меня есть массив бананов, я могу
опубликовать, где вам нужен массив
фрукты, потому что банан является подтипом
фрукты, так что если у меня есть множество бананов
и вам нужно множество фруктов, я могу
передать вам этот массив. Теперь, если вы
ожидаю много фруктов, я
не может передать вам множество
бананы потому что перечислимы до .NET
4.0 не был ковариантным. Так что тот факт, что хотя банан является особенным
фруктовый, банановый
не было перечисляемых фруктов.