Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
22.05.2015, 03:24
|
|||
---|---|---|---|
наследование событий в C# |
|||
#18+
Здравствуй форум. Может кто-нибудь подсказать, как правильно наследовать события. а именно. Есть абстрактный класс A с событием EventHandler AEvent Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Есть класс B наследованный от А Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
1) как добиться чтоб получалось подписаться на событие в экземпляре класса B Код: c# 1. 2.
2) чтоб ещё и при этом срабатывал обработчик в A 3) можно оставить field-like синтаксис события, или надо полную форму использовать с add\remove ? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
22.05.2015, 07:51
|
|||
---|---|---|---|
наследование событий в C# |
|||
#18+
Кажется, что Вы немного не по делу пытаетесь применить наследование Если на Вашу задачу смотреть "в лоб", то вот такой код должен отвечать требованиям: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Если все-таки что-то не так, расскажите по подробней про задачу, которую Вы пытаетесь решить ... |
|||
:
Нравится:
Не нравится:
|
|||
|
22.05.2015, 08:38
|
|||
---|---|---|---|
наследование событий в C# |
|||
#18+
breee3, и чего Вы хотите этим добиться? Обработчик eh_AEvent должен быть виртуальный, а не событие. Хотя зачем классу подписываться на собственное событие? По идее класс должен его инициировать. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
22.05.2015, 09:11
|
|||
---|---|---|---|
наследование событий в C# |
|||
#18+
ЕвгенийВskyANA, http://sergeyteplyakov.blogspot.ru/2011/02/c.html спасибо конечно, но зачем это ТСу? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
22.05.2015, 13:33
|
|||
---|---|---|---|
наследование событий в C# |
|||
#18+
breee3, хотелось бы понять, что значит для тебя наследование событий? если имеется ввиду возможность вызвать то в мсдн написано: Wrap event invocations inside a protected virtual method to allow derived classes to override the event invocation behavior ... |
|||
:
Нравится:
Не нравится:
|
|||
|
22.05.2015, 13:44
|
|||
---|---|---|---|
наследование событий в C# |
|||
#18+
pation, Я понимаю, автор хочет обработать событие в производном классе, а потом остальная логика обработана была в базовом классе... типо псевдо: Код: vbnet 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
22.05.2015, 14:13
|
|||
---|---|---|---|
наследование событий в C# |
|||
#18+
VSVLAD, template method, наверное ... |
|||
:
Нравится:
Не нравится:
|
|||
|
22.05.2015, 14:40
|
|||
---|---|---|---|
|
|||
наследование событий в C# |
|||
#18+
breee31) как добиться чтоб получалось подписаться на событие в экземпляре класса BМожет тут вообще событие не нужно? Есть вот такой подход: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Код: c# 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
22.05.2015, 14:42
|
|||
---|---|---|---|
наследование событий в C# |
|||
#18+
1) убрать protected из Код: c# 1.
2) а куда он денется? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
23.05.2015, 05:40
|
|||
---|---|---|---|
наследование событий в C# |
|||
#18+
Ой, извините, за не ясную формулировку. Да еще и код с ошибками написал, не привык на c# в блокноте.. Попытаюсь ещё раз. Есть базовый абстрактный класс. От него наследуются несколько не абстрактных. Событие абстрактного класса я хочу вызывать из наследуемых. Хочу, чтоб сторонние классы могли подписаться на это событие. А так же чтоб в базовом классе, выполнилась некоторая логика. Надеюсь понятно, объяснил. Никак у меня не укладывается в голове, как они наследуются. Что я не пробую получаю ошибки синтаксиса. Я уже обошел это проблему дублированием кода в потомках.. но хотелось бы по уму.. да и вообще разобраться.. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
23.05.2015, 06:03
|
|||
---|---|---|---|
наследование событий в C# |
|||
#18+
pationbreee3, хотелось бы понять, что значит для тебя наследование событий? если имеется ввиду возможность вызвать то в мсдн написано: Wrap event invocations inside a protected virtual method to allow derived classes to override the event invocation behavior а вот это, уже похоже на решение ... |
|||
:
Нравится:
Не нравится:
|
|||
|
23.05.2015, 08:02
|
|||
---|---|---|---|
наследование событий в C# |
|||
#18+
breee3Событие абстрактного класса я хочу вызывать из наследуемых. Хочу, чтоб сторонние классы могли подписаться на это событие. А так же чтоб в базовом классе, выполнилась некоторая логика. теперь гораздо понятней. Рискую получить тухлую помидорку за критику задачи вместо предложения решения, однако, на мой взгляд, автор пошел категорически неверным путем. Поясню: 1. С точки зрения S.O.L.I.D., контракт внешней коммуникации не может одновременно использоваться для внутренней коммуникации в рамках объекта. Иными словами, если событие присутствует в интерфейсе общения с внешним миром, не следует использовать это же событие для общения между базовой и производной частями класса. 2. Событийный механизм общения между базовой и производной частями вообще вызывает вопросы, так как ограничения по области видимости не могут в родителе быть более строгими, чем в наследнике (за исключением совсем экзотических случаев). Из-за этого возникает путаница с направленностью данной зависимости (не очевидно кто является инициатором, а кто потребителем). Обратная ситуация, в свою очередь, как раз очень типична, когда родитель возбуждает событие, а наследник на него подписывается. Таким образом, я бы предложил в базовой реализации создать protected метод и в нужные моменты вызывать данный метод из наследника. Внешняя коммуникация однозначно должна организовываться отдельно. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
23.05.2015, 10:19
|
|||
---|---|---|---|
|
|||
наследование событий в C# |
|||
#18+
zz118Таким образом, я бы предложил в базовой реализации создать protected метод и в нужные моменты вызывать данный метод из наследника. Внешняя коммуникация однозначно должна организовываться отдельно. +1. Классика жанра: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52.
Консольный вывод: Код: plaintext 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
24.05.2015, 12:34
|
|||
---|---|---|---|
наследование событий в C# |
|||
#18+
breee3pationbreee3, хотелось бы понять, что значит для тебя наследование событий? если имеется ввиду возможность вызвать то в мсдн написано: Wrap event invocations inside a protected virtual method to allow derived classes to override the event invocation behavior а вот это, уже похоже на решениеа если Вы приведенный на английском текст забьете в поиске гугла, то еще и пример кода этого решения увидите :) ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=20&tablet=1&tid=1401471]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
49ms |
get forum data: |
3ms |
get page messages: |
72ms |
get tp. blocked users: |
2ms |
others: | 333ms |
total: | 528ms |
0 / 0 |