Ковариантность и контравариантность - это понимание принципа наследования.
В обоих: ковариация и контравариантность, с.т. "передается" либо как возвращаемое значение, либо как аргумент метода делегата. То, что «передается», должно быть «поймано» в сосуде. В C # - или программировании жаргона как такового - мы используем слово bucket для того, что я назвал сосудом. Иногда вам приходится прибегать к другим словам, чтобы уловить значение часто используемых жаргонных слов.
В любом случае, если вы понимаете наследование, что, скорее всего, любой читатель здесь, то единственное, на что следует обратить внимание, это то, что сосуд, т.е. е. ковш, используемый для отлова, должен быть того же типа или менее производного типа, чем тот, который передается - это верно как для ковариации, так и для контравариантности.
Наследование говорит, что вы можете поймать птицу в ведре с животными, потому что птица - животное. Таким образом, если параметр метода должен поймать птицу, вы можете поймать его в ведро с животными (параметр типа animal), что тогда является контрвариантностью.
И если ваш метод, т. Е. Ваш делегат возвращает птицу, то «корзина» также может быть птицей типа «птица» или менее производной (родительского типа), то есть переменная, в которую вы перехватываете возвращаемое значение метода, должна иметь вид тот же или менее производный тип, чем возвращаемое значение.
Просто переключите свое мышление, чтобы различить то, что передается, и то, что улавливается, и тогда вся сложность, связанная с ковариацией и контравариантностью, хорошо растворяется. Тогда вы понимаете, что действует тот же принцип. Просто наследство не может быть нарушено, поскольку оно течет только в одном направлении.
И компилятор настолько умен, что когда вы приводите контейнер в более специализированный тип (снова и снова, когда это необходимо), тогда и только тогда вы возвращаете все специализированные методы, которые были добавлены в более производный класс. Это красота этого. Так что ловите, применяйте и используйте то, что у вас есть и, возможно, вам нужно.