|
наследование событий в 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, 03:24 |
|
наследование событий в C#
|
|||
---|---|---|---|
#18+
Кажется, что Вы немного не по делу пытаетесь применить наследование Если на Вашу задачу смотреть "в лоб", то вот такой код должен отвечать требованиям: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Если все-таки что-то не так, расскажите по подробней про задачу, которую Вы пытаетесь решить ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2015, 07:51 |
|
наследование событий в C#
|
|||
---|---|---|---|
#18+
breee3, и чего Вы хотите этим добиться? Обработчик eh_AEvent должен быть виртуальный, а не событие. Хотя зачем классу подписываться на собственное событие? По идее класс должен его инициировать. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2015, 08:38 |
|
наследование событий в C#
|
|||
---|---|---|---|
#18+
ЕвгенийВskyANA, http://sergeyteplyakov.blogspot.ru/2011/02/c.html спасибо конечно, но зачем это ТСу? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2015, 09:11 |
|
наследование событий в 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:33 |
|
наследование событий в C#
|
|||
---|---|---|---|
#18+
pation, Я понимаю, автор хочет обработать событие в производном классе, а потом остальная логика обработана была в базовом классе... типо псевдо: Код: vbnet 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2015, 13:44 |
|
наследование событий в C#
|
|||
---|---|---|---|
#18+
VSVLAD, template method, наверное ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2015, 14:13 |
|
наследование событий в 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:40 |
|
наследование событий в C#
|
|||
---|---|---|---|
#18+
1) убрать protected из Код: c# 1.
2) а куда он денется? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2015, 14:42 |
|
наследование событий в C#
|
|||
---|---|---|---|
#18+
Ой, извините, за не ясную формулировку. Да еще и код с ошибками написал, не привык на c# в блокноте.. Попытаюсь ещё раз. Есть базовый абстрактный класс. От него наследуются несколько не абстрактных. Событие абстрактного класса я хочу вызывать из наследуемых. Хочу, чтоб сторонние классы могли подписаться на это событие. А так же чтоб в базовом классе, выполнилась некоторая логика. Надеюсь понятно, объяснил. Никак у меня не укладывается в голове, как они наследуются. Что я не пробую получаю ошибки синтаксиса. Я уже обошел это проблему дублированием кода в потомках.. но хотелось бы по уму.. да и вообще разобраться.. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2015, 05:40 |
|
наследование событий в C#
|
|||
---|---|---|---|
#18+
pationbreee3, хотелось бы понять, что значит для тебя наследование событий? если имеется ввиду возможность вызвать то в мсдн написано: Wrap event invocations inside a protected virtual method to allow derived classes to override the event invocation behavior а вот это, уже похоже на решение ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2015, 06:03 |
|
наследование событий в C#
|
|||
---|---|---|---|
#18+
breee3Событие абстрактного класса я хочу вызывать из наследуемых. Хочу, чтоб сторонние классы могли подписаться на это событие. А так же чтоб в базовом классе, выполнилась некоторая логика. теперь гораздо понятней. Рискую получить тухлую помидорку за критику задачи вместо предложения решения, однако, на мой взгляд, автор пошел категорически неверным путем. Поясню: 1. С точки зрения S.O.L.I.D., контракт внешней коммуникации не может одновременно использоваться для внутренней коммуникации в рамках объекта. Иными словами, если событие присутствует в интерфейсе общения с внешним миром, не следует использовать это же событие для общения между базовой и производной частями класса. 2. Событийный механизм общения между базовой и производной частями вообще вызывает вопросы, так как ограничения по области видимости не могут в родителе быть более строгими, чем в наследнике (за исключением совсем экзотических случаев). Из-за этого возникает путаница с направленностью данной зависимости (не очевидно кто является инициатором, а кто потребителем). Обратная ситуация, в свою очередь, как раз очень типична, когда родитель возбуждает событие, а наследник на него подписывается. Таким образом, я бы предложил в базовой реализации создать protected метод и в нужные моменты вызывать данный метод из наследника. Внешняя коммуникация однозначно должна организовываться отдельно. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2015, 08:02 |
|
наследование событий в 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2015, 10:19 |
|
наследование событий в C#
|
|||
---|---|---|---|
#18+
breee3pationbreee3, хотелось бы понять, что значит для тебя наследование событий? если имеется ввиду возможность вызвать то в мсдн написано: Wrap event invocations inside a protected virtual method to allow derived classes to override the event invocation behavior а вот это, уже похоже на решениеа если Вы приведенный на английском текст забьете в поиске гугла, то еще и пример кода этого решения увидите :) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2015, 12:34 |
|
|
start [/forum/topic.php?fid=20&fpage=83&tid=1401471]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
136ms |
get topic data: |
14ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
others: | 16ms |
total: | 253ms |
0 / 0 |