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