0 / 0 / 0
Регистрация: 09.11.2012
Сообщений: 30
|
|
1 | |
Как реализуется Event с разным количеством параметров?12.05.2014, 18:15. Просмотров 2371. Ответов 30
Метки нет Все метки)
(
Возможно как то реализовать Event на который можно подписать функции с разным количеством параметров ????
0
|
|
12.05.2014, 18:15 | |
Процедура с разным количеством передаваемых параметров
Как правильно делать документы с разным количеством одинаковых форм Форматированный вывод или как вывести коллекцию с разным количеством цифр в
__________________
30
Помогаю в написании студенческих работ здесь. Записывайтесь на профессиональные курсы С#-разработчиков |
|
![]() 14847 / 11235 / 2948
Регистрация: 17.09.2011
Сообщений: 18,817
|
|
12.05.2014, 18:18 | 2 |
Сигнатура метода-обработчика должна совпадать с сигнатурой делегата, используемого для события.
Если не совпадают, а методов много, то используйте обертку: подписывайтесь одним методом и в нем уже вызывайте нужные функции с разными параметрами.
0
|
0 / 0 / 0
Регистрация: 09.11.2012
Сообщений: 30
|
|
12.05.2014, 18:21 [ТС] | 3 |
Можно если не сложно простейший пример , допустим для двух функций f1(int x), f2(string s,int x);
0
|
![]() 14847 / 11235 / 2948
Регистрация: 17.09.2011
Сообщений: 18,817
|
||||||
12.05.2014, 18:25 | 4 | |||||
0
|
0 / 0 / 0
Регистрация: 09.11.2012
Сообщений: 30
|
|
12.05.2014, 18:31 [ТС] | 5 |
ты меня чуть не правильно понял , это ты сразу две функции подписал , а мне их цеплять в реалтайме надо по отдельности.
0
|
![]() 14847 / 11235 / 2948
Регистрация: 17.09.2011
Сообщений: 18,817
|
|
12.05.2014, 18:41 | 6 |
c0nail, я-то правильно понял.
Подумайте сами: есть событие, сигнатура обработчика которого имеет вид (object, EventArgs). Вы хотите на это событие подцепить метод с сигнатурой вида (string, int). Вопросы: что в этот метод должен передавать объект, когда запускает событие? Почему? Как он об этом догадается? Потому событие вам надо обрабатывать в том методе, сигнатуру которого понимает запускающий событие объект. И уже в методе динамически же решать, какой именно метод запускать и что именно в него передавать в качестве аргументов. Ну или чтобы не растекаться мысью по древу, приведите конкретный пример с конкретными данными, где у вас возникла эта проблема.
0
|
0 / 0 / 0
Регистрация: 09.11.2012
Сообщений: 30
|
||||||
12.05.2014, 18:49 [ТС] | 7 | |||||
Есть Event с такой сигнатурой
0
|
![]() 14847 / 11235 / 2948
Регистрация: 17.09.2011
Сообщений: 18,817
|
||||||
12.05.2014, 18:51 | 8 | |||||
![]() Решение
Какое значение должно в GetRes передаваться во время срабатывания endPath? Откуда это значение берется?
Если вкратце, то используйте обертку:
Однако, тут используется лямбда, потому не забывайте о захвате переменных.
1
|
0 / 0 / 0
Регистрация: 09.11.2012
Сообщений: 30
|
|
12.05.2014, 18:57 [ТС] | 9 |
ммм спасибо, все так как я и хотел , но что ты имел ввиду о захвате переменных?))))
0
|
![]() 14847 / 11235 / 2948
Регистрация: 17.09.2011
Сообщений: 18,817
|
||||||
12.05.2014, 19:06 | 10 | |||||
Ну вот пример:
Ответом на вопрос "ЧЗХ?!" и будет захват переменных ![]()
0
|
0 / 0 / 0
Регистрация: 09.11.2012
Сообщений: 30
|
|
12.05.2014, 19:13 [ТС] | 11 |
бяка.... выделять память под новые переменные ((( чтото такие костыли , мне больше кажется что изначально это не правильное решение вообще )))) буду думать
0
|
441 / 297 / 62
Регистрация: 12.10.2009
Сообщений: 1,159
|
||||||
13.05.2014, 08:01 | 12 | |||||
предлагаю такой вариант
![]()
c0nail, при современных ценах на комплектующие, проще купить новые ядра и оперативку чем допустить что программист будет месяцами вылизывать и оптимизировать код до байта, конечно оптимизация это важно, но также нужно понимать что 1 из главнейших врагов разработки это ПРЕЖДЕВРЕМЕННАЯ оптимизация кода, современный код прежде всего должен быть ЧИТАБЕЛЕН и ПОДДЕРЖИВАЕМ, а уж если гдето и есть узкие места то об этом скажет профайлер, и программист просто должен уведомить выше стоящих об этих узких местах, пусть у них болит голова о том что код работает не идеально, и тогда ТОЛЬКО ТОГДА когда от выше стоящих специалистов придет указание о оптимизации на основании проваленных тестов, когда на это будет выделены средства и время, только тогда можно приступать к ОПТИМИЗАЦИИ потребления ресурсов, потому как иногда ВАЖНЕЕ выпустить стабильный релиз который жрет на 100 - 200 метров больше чем на 2-4 месяца зависнуть в неустойчивом состоянии рефакторинга
0
|
156 / 185 / 48
Регистрация: 25.11.2013
Сообщений: 978
|
|||||||||||
13.05.2014, 08:34 | 13 | ||||||||||
Делегат уже объявлен, достаточно
0
|
441 / 297 / 62
Регистрация: 12.10.2009
Сообщений: 1,159
|
|
13.05.2014, 09:03 | 14 |
DataPlanner, а если у тебя 10-20-30 событий? в каждом месте зажигания проверять их на null?? на фига мне такой геморрой + твой подход ну ни как не способствует читабельности кода т. к. if есть точка разрыва внимания, и по твоему выходит что я должен держать в голове 10-20-30 точек внимания и переключаться между ними?
0
|
441 / 297 / 62
Регистрация: 12.10.2009
Сообщений: 1,159
|
|||||||||||
13.05.2014, 09:14 | 16 | ||||||||||
DataPlanner, писалось это не просто так, а с личного опыта на самом деле инициализация event выглядит так
insite2012, кхм... мне кажется вы не понимаете почему у меня в коде написано
0
|
Модератор
![]() |
|
13.05.2014, 09:16 | 17 |
агерон, я не совсем понял... Это вместо использования встроенного делегата EventHandler<T> с проверкой на null надо так каждое событие расписывать? Это оптимизация? По моему, проще проверить, чем столько кода писать...
0
|
441 / 297 / 62
Регистрация: 12.10.2009
Сообщений: 1,159
|
|
13.05.2014, 09:17 | 18 |
insite2012, да это оптимизация, и это проще чем каждый раз событие проверять на NULL
0
|
441 / 297 / 62
Регистрация: 12.10.2009
Сообщений: 1,159
|
|
13.05.2014, 09:21 | 20 |
т. к. проверки event'ов на NULL будут разбросаны по всему коду, а так все находиться в 1 месте
Добавлено через 1 минуту не сложнее чем разбросать 20-30 проверок на NULL, сейчас я приведу вам пример
0
|
13.05.2014, 09:21 | |
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь. Как отобразить двумерный массив ввиде матрицы с разным количеством строк и столбцов?
Как запрограммировать функцию со сменным количеством параметров Как написать лямбду с любым количеством параметров? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |