Мнемоника для универсальных типов C # - PullRequest
3 голосов
/ 27 августа 2010

Я часто забываю, нужно ли мне использовать в или в при определении ковариантных и контравариантных универсальных типов. В Java у меня есть мнемонический PECS (производитель расширяет потребительский супер), чтобы помочь мне. Знаете ли вы похожую мнемонику для c #?

Ответы [ 3 ]

3 голосов
/ 27 августа 2010

Разве они не сделали это для нас, когда они назвали их «вовнутрь» и «наружу», а не ковариантно и контравариантно?Подумайте только: толкаю ли я ценности «внутрь» или вынимаю их?Если вы не уверены, попробуйте «out» - это гораздо чаще (и проще для понимания).

1 голос
/ 27 августа 2010

in типы передаются in в функции;out типы возвращаются out из функций.

0 голосов
/ 27 августа 2010

Когда я не помню, я всегда ссылаюсь на IEnumerable<out T> (что означает, конечно, что я должен помнить подпись этого интерфейса ...). Вы можете получить только экземпляры T из IEnumerable<out T>, поэтому он является ковариантным. Если вы можете передавать только экземпляры T "in" в интерфейс (или делегировать, что более распространено), это противоречиво.

...