Делегат | |
---|---|
S-type Автор Сообщений: 2969 Дата регистрации: 24.04.2004 |
Можно написать так:
Это то же самое, что:
Хочу объявить свой тип делегата. Делаю:
Ругается: Цитата: Почему? Можно ли исправить код, что бы работал? Исправлено 1 раз(а). Последнее : S-type, 04.03.17 15:14 |
Re: Делегат | |
---|---|
S-type Автор Сообщений: 2969 Дата регистрации: 24.04.2004 |
Понятно, что если сделать:
Всё работает. Но, хотелось бы сделать с помощью делегата. |
Re: Делегат | |
---|---|
S-type Автор Сообщений: 2969 Дата регистрации: 24.04.2004 |
Так то же не работает:
|
Re: Делегат | |
---|---|
S-type Автор Сообщений: 2969 Дата регистрации: 24.04.2004 |
Вот так работает.
В msdn.microsoft.com сказано, что есть несколько перегруженных методов: Thread(ParameterizedThreadStart) - Инициализирует новый экземпляр класса Thread, при этом указывается делегат, позволяющий объекту быть переданным в поток при запуске потока. Thread(ThreadStart) - Инициализирует новый экземпляр класса Thread. Не понятно, в чём разница между методами. Если выполняется:
Какой из методов работает? И, почему он же не работает для:
Исправлено 2 раз(а). Последнее : S-type, 04.03.17 16:02 |
Re: Делегат | |
---|---|
Simple777 Сообщений: 33855 Дата регистрации: 05.11.2006 |
Ну.. за самодостаточность!..
|
Re: Делегат | |
---|---|
SoccerStudio Сообщений: 5055 Откуда: Подмосковье Дата регистрации: 28.11.2006 |
Не, ну а чего, правильно. С самим собой поговорить всегда приятно, а иногда и полезно. ------------------ "Здесь я, братцы, сдержу матерщину, и скажу только "... мать!"" (с) Шаов |
Re: Делегат | |
---|---|
S-type Автор Сообщений: 2969 Дата регистрации: 24.04.2004 |
Хм... Вопрос то "Почему?" остался. Хочется не просто, что бы работало, а понимать - почему именно так. |
Re: Делегат | |
---|---|
S-type Автор Сообщений: 2969 Дата регистрации: 24.04.2004 |
Буду благодарен на ссылки, подсказки, намёки... Размер моей благодарности не будет иметь границ (В разумных пределах) (С) Задорнов.
|
Re: Делегат | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Всё очень печально... Надо возвращаться к основам - системе типов. Читать весь раздел мануала посвящённый делегатам.
И тогда будет понятно почему в метод ожидающий тип int нельзя передать string. Ну и, соответственно, в метод ожидающий тип ThreadStart нельзя передать тип MyDelegate... Типы делегатов не приводятся, но в конструктор такого типа можно передать другой объект-делегат. И если они "совместимы по сигнатуре", то вновь созданный объект-делегат будет содержать "ссылку" на тот же метод (можно и анонимный), который содержался в ранее созданном объекте-делегате. Именно поэтому работает
При использовании анонимного метода или лямбды происходит автоматический вывод типа, поэтому компилятор создаёт "правильный" тип делегата для данного метода. ------------------ WBR, Igor |
Re: Делегат | |
---|---|
S-type Автор Сообщений: 2969 Дата регистрации: 24.04.2004 |
Вот оно где "собака порылась". |
Re: Делегат | |
---|---|
S-type Автор Сообщений: 2969 Дата регистрации: 24.04.2004 |
Полез читать... |
Re: Делегат | |
---|---|
S-type Автор Сообщений: 2969 Дата регистрации: 24.04.2004 |
Вывод типа, это когда переменная неизвестного типа слева, а справа - известного. Например:
А вот когда слева и справа переменные разного типа, то это "автоматическое приведение типов":
В случае
Компилятор ругается: Цитата: Может, проблема не в выводе типов, а в приведении типов? Исправлено 2 раз(а). Последнее : S-type, 04.03.17 22:38 |
Re: Делегат | |
---|---|
S-type Автор Сообщений: 2969 Дата регистрации: 24.04.2004 |
При этом msdn.microsoft.com этом описание
Т.е. как бы очень похоже на
и, нет каких то причин "брыкаться" по поводу типов. |
Re: Делегат | |
---|---|
SoccerStudio Сообщений: 5055 Откуда: Подмосковье Дата регистрации: 28.11.2006 |
Мда..., сложно объяснить.
Ну, к примеру. У тебя есть девушка и есть другая девушка. То, что у этих двух девушек одинаковое количество рук, ног и прочих прелестей, не делает этих двух девушек одною. Т.е. никак не приводит к заключению "нет каких-то причин брыкаться по поводу типов". Можно, правда, сделать "приведение" - сказать что-то типа "Маша, я буду звать тебя Даша, потому что другую девушку тоже зовут Даша. Поэтому когда мы с тобой в постели кой чего делаем, это я не с тобой, а с ней." ------------------ "Здесь я, братцы, сдержу матерщину, и скажу только "... мать!"" (с) Шаов Исправлено 2 раз(а). Последнее : SoccerStudio, 04.03.17 23:40 |
Re: Делегат | |
---|---|
S-type Автор Сообщений: 2969 Дата регистрации: 24.04.2004 |
Не смотря на то, что девушка это "объект", а не тип - аналогия понятна. ThreadStart и MyDelegate - это разные типы, для которых не существует автоматического приведения типа. Так?
Тогда вопрос - почему работает
Не ужели потому, что ThreadStart является дочерним для delegate? |
Re: Делегат | |
---|---|
S-type Автор Сообщений: 2969 Дата регистрации: 24.04.2004 |
М, да... Какие то "непокладистые" делегаты. Как же преобразовать? |
Re: Делегат | |
---|---|
SoccerStudio Сообщений: 5055 Откуда: Подмосковье Дата регистрации: 28.11.2006 |
Так не надо девушек-то преобразовывать. Надо определиться, с какой гулять.
------------------ "Здесь я, братцы, сдержу матерщину, и скажу только "... мать!"" (с) Шаов |
Re: Делегат | |
---|---|
S-type Автор Сообщений: 2969 Дата регистрации: 24.04.2004 |
Т.е. есть только один вариант:
|
Re: Делегат | |
---|---|
Simple777 Сообщений: 33855 Дата регистрации: 05.11.2006 |
Алгоритм Казановы:
|
Re: Делегат | |
---|---|
S-type Автор Сообщений: 2969 Дата регистрации: 24.04.2004 |
Не смог найти в нете подтверждения этому (возможно, плохо искал). Мне кажется, что
работает потому, что ThreadStart наследуется от Delegate. Т.е. контравариантность делегата. |
© 2000-2024 Fox Club  |