2017-02-19 14 views

ответ

2

Вы когда-нибудь писали foreach? Если у вас есть, то вы использовали Covariance, так что это реальный мир. Вы можете использовать foreach на любом типе, который реализует IEnumerable. Вот подпись для IEnumerable:

public interface IEnumerable<out T> : IEnumerable 
          ^^ 
          || 
        // See the above out keyword 

Это out ключевого слова для ковариации поэтому она применяется только для возврата типов.

Вы когда-нибудь использовали интерфейс IComparable, то вы использовали контравариантность. Вот подпись:

public interface IComparer<in T> 
          ^^ 
          || 
        // See the above in keyword 

Это in ключевое слово для контрвариации поэтому применяется только к типам параметров членов интерфейса.

И если отсутствуют ключевые слова out и in, то это относится как к параметрам входного параметра, так и к возвращаемым параметрам. Это называется invariance.

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

  • Нет связанных вопросов^_^