Параметры-типы могут быть:
- Инвариантными. Параметр-тип не может
изменяться.
- Контравариантными. Параметр-тип может быть
преобразован от класса к
классу, производному от него. В языке C# контравариантный тип
обозначается ключевым словом in. Контравариантный параметр-тип
может появляться только во входной позиции, например, в
качестве
аргументов метода.
- Ковариантными. Аргумент-тип может быть преобразован от класса к
одному из его базовых классов. В языке С# ковариантный тип обозначается
ключевым словом out. Ковариантный параметр обобщенного типа может появляться только
в выходной позиции, например, в качестве возвращаемого значения метода.