|
Каждому свое
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
|
||||||||||||||||
Вызов события в производном классе, которое объявлено в базовом13.10.2017, 20:53. Показов 6869. Ответов 8
Метки нет (Все метки)
Доброго времени суток, Господа. Возник вопрос.
Есть класс A:
Ведь событие в базовом классе имеет уровень доступа public, разве я не могу его вызывать в классе наследнике?Могу обойти это:
Вопросы: 1. Что делать? 2. Почему не работает?
0
|
||||||||||||||||
| 13.10.2017, 20:53 | |
|
Ответы с готовыми решениями:
8
В базовом классе вводится символьный массив, а в производном - проверка на максимальную длину строки
базовый и производный класс, в базовом объявлена переменная "protected", она недоступна по имени в производном классе! template <class T> воду мутит! |
|
Администратор
|
|
| 13.10.2017, 21:29 | |
|
Bretbas, событие принадлежит классу в котором объявлено и только он имеет право его генерировать. Исправить можно по разному:
- переписать код так чтобы наследникам не было необходимости генерировать событие родителя - сделать protected метод в базовом классе генерирующий событие - заменить событие на делегат - использовать { add { } remove { } } блок для события, хранить подписчиков в protected поле родительского класса
1
|
|
|
Каждому свое
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
|
|||||||
| 14.10.2017, 07:58 [ТС] | |||||||
|
OwenGlendower, Подскажите пожалуйста, у меня есть базовый класс, который в себе имеет 3 события -
ExecuteStart, ExecuteStep, ExecuteCompleted. Также этот базовый класс имеет метод Execute(), который нужно будет переопределить в наследниках. И последнее, что имеет базовый класс, это метод Start(), который генерирует вначале событие ExecuteStart, потом выполняет Execute(), и затем генерирует событие ExecuteCompleted. Так вот мне нужно сделать так, чтобы событие ExecuteStep генерировалось внутри Execute(), а это значит, что мне нужно его генерировать в наследнике.У меня получилось реализовать это таким образом, как я уже показывал выше:
![]() Просто, на мой взгляд, это выглядит симпатичнее. Но меня насторожила выписка из MSDN
0
|
|||||||
|
Администратор
|
||||||
| 16.10.2017, 00:09 | ||||||
|
Bretbas, в MSDN же ясно сказано. Виртуальные события не работают так как ожидается. Вот простой пример
1
|
||||||
|
Каждому свое
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
|
|
| 16.10.2017, 08:10 [ТС] | |
|
OwenGlendower, Ну я не говорю про виртуальные события, говорю про абстрактные. Хотя и те и те должны быть в виртуальной таблице, по идее.
Так вот, если мы сделаем абстрактное событие в классе A, то мы его не сможем сгенерировать в классе A, а именно в методе Raise(). Но мне это и не надо. Мне нужно его генерировать в классе наследнике от A
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||||||||||||
| 16.10.2017, 10:12 | ||||||||||||
1
|
||||||||||||
|
Каждому свое
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
|
|
| 16.10.2017, 17:18 [ТС] | |
|
kolorotur, Базара нет, этот способ я еще на MSDN я увидел
Но я все же хочу узнать, что будет, если переопределять абстрактные события классах наследниках и генерировать их там же? Просто у меня ошибки никакой при этом пока что не возникало. Поэтому мне просто интересно, почему так не следует делать. Или все таки так можно делать, но предупреждение было только о виртуальный событиях.
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||||
| 16.10.2017, 20:28 | ||||
Сообщение было отмечено Bretbas как решение
Решение![]() Другое дело, что опасно.
1
|
||||
|
Каждому свое
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
|
|
| 16.10.2017, 21:13 [ТС] | |
|
kolorotur, OwenGlendower, Спасибо. Все ясно
0
|
|
| 16.10.2017, 21:13 | |
|
Помогаю со студенческими работами здесь
9
Вызов метода базового класса игнорируя переопределенный метод в производном классе Есть базовый и производный класс, в базовом определена функция, необходимо её объявить в производном! Event вызов события в классе
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|