Из Википедии:
ковариантный: преобразование из более широкого (двойное) в более узкое (плавающее).
контравариантное: преобразование из более узкого (плавающее) в более широкое (двойное).
В .NET у делегата есть ковариация, потому что он позволяет производным типам указанного делегата возвращаемого типа быть типом возвращаемого значения метода, на который он содержит ссылку.
Кроме того, у делегата есть контравариантность, поскольку он позволяет производным типам заданных аргументов (параметров) делегата быть типом аргумента, передаваемым в метод, на который он содержит ссылку.
Разве эти два определения, относящиеся к делегатам, не должны быть ковариантными? В обоих случаях делегат ожидает «более широкий» тип, но ему предоставляется «более узкий тип».
См. здесь для примера обоих из MSDN.
Итак, как слово контравариантность имеет лингвистический смысл применительно к делегатам?