![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
Dims |
|
||||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: 0 Всего: 11 |
В джаве я мог писать:
Как мне так же написать в C#? А то у меня как-то уж совсем нелепо получается: сперва определяю специальный тип делегата,
затем определяю метод с той же сигнатурой
и только потом вызваю BeginInvoke
Сразу две лишние сущности! |
||||||||
|
|||||||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
Dims,
|
|||
|
||||
yar |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 101 Регистрация: 8.9.2007 Где: Одесса, Украина Репутация: нет Всего: 8 |
C# 3.0:
C# 2.0:
--------------------
Если бы строители возводили здания так, как программисты пишут программы, первый же дятел уничтожил бы мировую цивилизацию.Джеральд Вайнберг |
||||
|
|||||
Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: 0 Всего: 11 |
А зачем нужен этод MethodInvoker?
Почему сразу нельзя написать: BeginInvoke(RefreshList); В Си++, помнится, если какой-то метод принимал указатель на функцию, ему можно было передать прямо имя этой функции (может, с амперсандом, не помню). |
|||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
Dims, BeginInvoke принимает объект типа Delegate, а не указатель. Delegate - абстрактный класс. Автовывода типов делегатов (типа того, что есть для классов и методов) пока нет. Вот и приходится любой неабстрактный тип-наследник Delegate.
|
|||
|
||||
Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: 0 Всего: 11 |
А вот так будет правильно работать:
Мне кажется, что получается так, что ко времени выполнения MessageBox цикл успевает уже пройти несколько итераций и в MessageBox может попасть не первое значение. Это так? Добавлено через 1 минуту и 44 секунды Иными словами, если в делегат попадает функция, которая использует значения некоторых переменных, то сохраняются ли эти значения до времени выполнения делегата? |
|||
|
||||
yar |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 101 Регистрация: 8.9.2007 Где: Одесса, Украина Репутация: нет Всего: 8 |
Dims, Верно. будет использовано то значение, которое существует на момент вызова делегата.
Скорее всего к тому моменту, как начнёт выполнятся MessageBox.Show, цикл уже закончится, и все сообщения будут десятками. Java нас ограничивает, заставляя объявлять все переменные, на которые замыкается анонимный класс как final, так что если мы напишем что-то вроде следующего, при наличии MyBeginInvoke:
То на нас ругнутся, что i должно быть final Если же в java7 добавят замыкания, то тут наступит такой же беспредел, как и в С# ;). --------------------
Если бы строители возводили здания так, как программисты пишут программы, первый же дятел уничтожил бы мировую цивилизацию.Джеральд Вайнберг |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |