2010-05-27 2 views
4

Я хочу познакомиться с недавно выпуском .NET Framework 4.0 и его Covariance and Contravariance in Generics.Хорошее практическое применение ковариации и контравариантности в .NET 4.0?

Несмотря на то, что я прочитал то, что написано на ссылке, я не могу понять, как это следует использовать, и когда это не должно.

Краткое описание и простой образец кода в реальном мире.

Спасибо! =)

ответ

6

Эрик Мейер беседовал с Скоттом Ханзельменом о Reactive Framework в одном из недавних подкастов Скотта, и одна из вещей, которые сказал Эрик, - это то, что в .NET 4.0 IEnumerable ковариантно, но в .NET 3.5 IEnumerable не является.

Что это означает, что, если у вас есть Banana объекта, который наследует от Fruit, вы можете присвоить банан переменных фруктов, но вы не можете передать IEnumerable бананов к способу, ожидая плоды IEnumerable в .NET 3.5 , потому что IEnumerable не является ковариантным.

Из подкаста:

Если у меня есть массив бананов, я могу пост, который где нужен массив фруктов, потому что банан является подтипом фруктов, так что если у меня есть массив бананов , и вам нужен массив фруктов, я могу передать вам этот массив. Теперь, если вы ожидаете перечислимого из фруктов, я не может передать вам перечислимый из бананов, потому что перечислимый до .NET 4.0 не был ковариантным. Так что тот факт, что банан - особый вид фруктов, перечислимый бананом не был перечислимым фруктом.

+0

Не очень-то пример реального мира, ey? :) – cwap

+0

@cwap: возможность пройти коллекцию ковариантов - это настоящая проблема программирования; в одном случае вы можете просто передать коллекцию, в другом случае вы должны скопировать каждый элемент в коллекции в новую коллекцию. Если вам действительно нужен пример реального мира, послушайте подкаст. Эрик подробно объясняет, почему это было важно при разработке Reactive Framework. –

+0

Конечно, не слушал подкаст :) На первый взгляд я просто не думал, что Банана: Фрут, был таким замечательным примером в мире - Но мы согласны с тем, что это отличная возможность! – cwap

Смежные вопросы