У меня есть книга, которая объясняет контравариантность / ковариацию следующим образом ...
Это не очень хорошее объяснение дисперсии. остается совершенно неясным, что же такое , что называется "ковариация" и "контрвариантность".
То, что на самом деле является вариантом, никогда не упоминается.Что противоречиво, так это отображение типа в делегат с параметром этого типа .Контравариантность является свойством отображений и отношений .
Попробуйте прочитать это и посмотрите, понимаете ли вы это лучше:
http://blogs.msdn.com/b/ericlippert/archive/2007/10/19/covariance-and-contravariance-in-c-part-three-member-group-conversion-variance.aspx
Я думал, что для использования ковариации / контравариантности необходимо использоватьновый, как показано в примере, но я, кажется, получаю тот же результат ...
Начиная с C # 2.0, вы можете сказать либо "d = M", либо "d = new D (M)"- компилятор просто распознает их как два разных способа написания одной и той же вещи.
почему автор использует новое для объяснения ковариации / контравариантности?
Я не знаюне знаю.
Какая теория стоит за идеей ковариации / контравариантности?
Теория состоит в том, что если у вас есть упорядочивающие отношения - то есть, X больше, чем Y, если допустимо сказать X x = (Y) y -и у вас есть отображение , которое сохраняет отношение упорядочения, тогда отображение является ковариантным.Если оно переворачивает отношение порядка, то оно контравариантно .
Например, предположим, что Животное - это более крупный тип, чем Жираф.Таким образом, вы можете назначить объект типа Giraffe переменной типа Animal.Animal> Giraffe.
Теперь создайте сопоставление типа T с методом M-that-take-aT и типом делегата D-that-take-aT.
Вы можете назначить метод M-that-take-an-Animal переменной типа D-that-take-a-Giraffe.D (Жираф)> M (Животное), но Животное> Жираф.Отношения обратные ; отображение является контравариантным .
Это просто причудливое имя, описывающее объект x = Все наследуется от объекта?
Нет.Он связан с этим понятием, потому что объект имеет больший тип , чем почти любой другой тип.Но на самом деле вариант - это отображение , которое сохраняет или меняет соотношение размеров.
Попробуйте прочитать это и посмотрите, поможет ли это.
http://blogs.msdn.com/b/ericlippert/archive/2009/11/30/what-s-the-difference-between-covariance-and-assignment-compatibility.aspx
Откуда пришло это странное имя?
Теория категорий.