Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
temcha
28 / 28 / 5
Регистрация: 07.09.2012
Сообщений: 119
1

Присвоение делегату метода с параметром обобщенного типа Т

02.11.2012, 13:51. Просмотров 1050. Ответов 3
Метки нет (Все метки)

День добрый всем, вопрос по книге Щилдта. Он пишет следующее:

Ниже приведен пример контравариантного делегата.
C#
1
2
// Объявить делегат, контравариантный по отношению к обобщенному типу Т. 
delegate bool SomeOp<in T>(T obj);
Этому делегату можно присвоить метод с параметром обобщенного типа Т или же
класс, производный от типа Т.
А вот пример ковариантного делегата.
C#
1
2
// Объявить делегат, ковариантный по отношению к обобщенному типу Т. 
delegate T AnotherOp<out T, V>(V obj);
Этому делегату можно присвоить метод, возвращающий обобщенный тип Т, или
же класс, производный от типа Т. В данном случае V оказывается просто параметром
инвариантного типа.

Хочу уточнить, нет ли здесь никакой ошибки? Может перевод не такой или еще что... Разве для контрвариантного делегата не должно быть написано что то в духе: "Этому делегату можно присвоить метод с параметром обобщенного типа Т или же класс, базовый для типа Т."???
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.11.2012, 13:51
Ответы с готовыми решениями:

Как вернуть из метода экземпляр обобщенного типа
У меня есть фабрика которая наследует абстрактную обобщенную фабрику. class...

Нет перегруженного метода который соответствует делегату
Здравствуйте. Пытаюсь вывести процесс извлечения архива в label1. Никак не...

Ошибка: Нет перегруженного метода , который соответствует делегату
Подскажите, пожалуйста, что за ошибка и как с ней бороться? Ошибка CS0123 Нет...

Присвоение переменной одного метода значения из другого метода
Есть метод А(), в которой в переменную int a присваивается 34; И есть метод...

Использование обобщенного типа в классах и интерфейсах
Подчеркивает L&lt;T&gt; и выбивает &quot;Объявление параметра типа должно быть...

3
kolorotur
Эксперт .NET
10675 / 8841 / 2212
Регистрация: 17.09.2011
Сообщений: 15,201
Завершенные тесты: 1
02.11.2012, 23:17 2
Нет, все правильно.

Ковариантный делегат:
C#
1
2
AnotherOp<string, V> x = ....
AnotherOp<object, V> y = x; // OK
Контравариантный делегат:
C#
1
2
SomeOp<object> x = ...
SomeOp<string> y = x; // OK
0
temcha
28 / 28 / 5
Регистрация: 07.09.2012
Сообщений: 119
03.11.2012, 01:26  [ТС] 3
вообще ничего не понятно. Я быть может где то неправ, но объясните, почему как для Ковариантного, так и для контрвариантного делегатов написано одно и тоже (ну только там возвращаемый тип, а там параметр) - имею ввиду в книге Шилдта

В Вашем примере я не вижу присвоения метода делегату

Сравните то, что написано мною в самом начале, и этот кусок из книги того же Шилдта, где описуется ко- и контрвариантность только для необобщенных делегатов:

В частности, ковариантность позволяет
присвоить делегату метод, возвращаемым типом которого служит класс, производный
от класса, указываемого в возвращаемом типе делегата. А контравариантность
позволяет присвоить делегату метод, типом параметра которого служит класс, являющийся
базовым для класса, указываемого в объявлении делегата.
0
sergIKO
4 / 4 / 1
Регистрация: 20.01.2010
Сообщений: 93
31.12.2013, 21:09 4
Цитата Сообщение от temcha Посмотреть сообщение
вообще ничего не понятно.
взаимно
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.12.2013, 21:09

Привязка метода к делегату через рефлексию
Необходимо в поле делегата экземпляра класса задавать привязку к методу не...

Как вызвать деструктор для обобщенного типа
Здравствуйте. У меня проблема с вызовом деструктора для обобщенного типа. Такой...

Вызов оператора false для объекта обобщенного типа
Добрый вечер. По заданию нужно было перегрузить оператор false(как понимаю, с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru