5 / 5 / 3
Регистрация: 09.02.2014
Сообщений: 58
|
||||||
1 | ||||||
Как работает делегат в приведенном коде05.08.2014, 13:55. Показов 1391. Ответов 10
Метки нет Все метки)
(
Добрый день,
объясните пожалуйста как здесь работает делегат и зачем он вообще здесь нужен?
Код это конечно вырванный кусочек из целого,но там не где не идет привязка делегата к какому то либо методу. Я просто не пойму где и о чем читать что бы уловить смысл этого кусочка кода
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
|
|
05.08.2014, 13:55 | |
Ответы с готовыми решениями:
10
Декодирование текста в приведенном коде работает некорректно Сколько аргументов требуется передать в делегат в приведенном коде Как в приведенном коде работает malloc?
|
7 / 7 / 3
Регистрация: 16.03.2013
Сообщений: 18
|
||||||
05.08.2014, 14:26 | 2 | |||||
У вас делегат стоит в качестве формального параметра у статического метода ForceCast.
Соответственно, когда вы вызываете этот метод, то делегат инициализируется ссылкой на анонимный метод, записанный через лямбда-выражение:
0
|
5 / 5 / 3
Регистрация: 09.02.2014
Сообщений: 58
|
|
05.08.2014, 15:12 [ТС] | 3 |
Спасибо,
а зачем так сделано не скажите? Где плюсы? Ведь можно просто передать Me.CurrentTarget?
0
|
7 / 7 / 3
Регистрация: 16.03.2013
Сообщений: 18
|
||||||
05.08.2014, 15:35 | 4 | |||||
По правде говоря, вот это
А вообще по данному куску кода, данный делегат действительно бессмыслен.
0
|
05.08.2014, 16:03 | 5 |
UnitSelectionDelegate выполняет некие действия над ret, который находится где-то внутри только что созданного Decorator. В вашем случае результат не зависит от входящего параметра, но в общем случае это не так.
0
|
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
|
|
05.08.2014, 18:39 | 6 |
gerrus, делегат тут можно использовать, указав некий метод-фабрику для объектов класса ClassA.
В данном же примере используется только один объект класса ClassA, потому объявленный делегат используется только для указания параметра в функции ForceCast.
0
|
5 / 5 / 3
Регистрация: 09.02.2014
Сообщений: 58
|
|||||||||||
05.08.2014, 20:29 [ТС] | 7 | ||||||||||
Спасибо за разъяснения, но я не чего так и не понял ![]() ![]() Может кто нибудь сможет написать пример со "стандартным кодом" (для новичков с нормальным методом)? Вот тоже кусочек:
Тоже самое ,только с анонимным методом:
Ну реально не могу въехать в эти делегаты ![]()
0
|
![]() |
|
05.08.2014, 20:41 | 8 |
Это просто параметр типа object, а назвали его так, наверное, по прихоти писавшего код... Можно назвать как угодно (изменив имя этого параметра дальше в коде).
И да, может вы все-таки весь код покажете, а не кусочками...
0
|
5 / 5 / 3
Регистрация: 09.02.2014
Сообщений: 58
|
|
05.08.2014, 21:38 [ТС] | 9 |
Да показал бы, только для этого нужна библиотека , да и код не мой (хотя лежит в открытом виде).
Я только стараюсь понять и написать свой вариант. Таким образом увеличить знания (которых пока очень мало) C#. Всё это делается ради интереса и хобби ![]() Кликните здесь для просмотра всего текста
кому интересно, речь идет о Honorbuddy и Combat Routines
0
|
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
|
|
06.08.2014, 17:35 | 10 |
![]() Решение
gerrus, мы имеем некоторый класс Decorator, который в качестве первого параметра принимает анонимную функцию в качестве первого параметра и объект Sequence вторым.
первый параметр представлен в виде лямбда-выражения, которое в свою очередь уже использует делегат UnitSelectionDelegate. почитав что такое лямбда-выражения вы поймете, что ret это лишь параметр анонимного метода. Добавлено через 31 минуту попробую побыть шаманом и угадать что это и для чего это надо. у нас есть метод ForseCast и Cast, которые возвращают объект Composite. но метод возвращает объект Decorator - а это уже похоже шаблон проектирования. Судя по названиям методов делаем предположение, что это какая-то игра и это методы вызова заклинаний. Далее проводим цепочку и понимаем, что игра без графики сейчас не игра, то есть, скорее всего,эти методы возвращают некоторые объекты(команды) для графики. Смотрим далее на параметры Decorator. Первый это проверка на ошибки. При этом проверку необходимо делать именно в момент вызова анимации. Однако для каждого действия нужна своя проверка. Именно потому первый параметр - это функция, а не результат вычисления. И в момент выполнения команда(Composite) выполнить функцию, которую создало именно само действие, а команде без разницы какое это действие и нет необходимости обращаться к самому действию и его объектам. Рассмотрим зачем тут используется UnitSelectionDelegate. В данном случае используется целевое заклинание, а ведь может быть и заклинание по площади, или вовсе не заклинание, а взаимодействие с окружающей средой героя и цель воздействия необходимо определить именно в момент выполнения команды. Потому в данном случае мы видим на месте делегата простую передачу объекта, а в более сложном случае там будет функция, которая и вернет объект(ы) воздействия. Второй это уже непосредственно метод, который должен выполниться этой командой, метод тоже создает само действие и команде без разницы каким объектом было выполнено.
2
|
5 / 5 / 3
Регистрация: 09.02.2014
Сообщений: 58
|
|
07.08.2014, 09:18 [ТС] | 11 |
Learx, Спасибо! Более менее понял зачем там делегат!!
0
|
07.08.2014, 09:18 | |
Помогаю со студенческими работами здесь
11
Не работает сортировка в приведенном коде Не правильно работает if в приведенном коде Не работает сортировка в приведенном коде Как работает функция "test" в приведенном коде Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |