Как зайти в Даркнет?!
25th January, 01:11
6
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
895
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
914
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
905
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4381
0
Помогите пожалуйста решить задачи
24th November, 23:53
6086
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4351
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4396
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Вызов базовых методов при переопределении событий уровня страницы
В моем коде за спиной я связываю свои события вот так:
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
btnUpdateUser.Click += btnUpateUserClick;
}
Я сделал это таким образом, потому что это то, что я видел в примерах.
- Нужно ли вызывать метод base.OnInit()?
- Будет ли он неявно называться?
- Лучше ли вызывать его в начале метода или в конце?
- Каков будет пример, когда путаница в базовом методе может привести вас к неприятностям?
Я должен уточнить:
В руководстве рекомендуется, чтобы запуск события включал вызов виртуального метода "On EventName", но также говорится, что если производный класс переопределяет этот метод и забывает вызвать базовый метод, то событие все равно должно запускаться.
Смотрите "Important Note" примерно в середине этой страницы :
Производные классы, которые переопределяют защищенный виртуальный метод, не обязаны вызывать реализацию базового класса. Базовый класс должен продолжать корректно работать, даже если его реализация не вызывается.
В этом случае, если вы не вызовете базу OnInit, то Init даже не выстрелит.
В общем случае лучше всего вызывать метод ALWAYS base, если только вы не уверены, что не хотите, чтобы базовое поведение возникло.
Будет ли он вызван в начале или в конце, зависит от того, как вы хотите, чтобы все работало. В таком случае, когда вы используете переопределение вместо подключения обработчика событий, вызов его в начале метода имеет больше смысла. Таким образом, ваш код будет работать после любых обработчиков, что делает его более эмулирующим обработчик событий "normal".
Хотя официальные рекомендации по разработке фреймворка рекомендуют иначе, большинство дизайнеров классов фактически сделают метод OnXxx() ответственным за запуск фактического события, как это:
protected virtual void OnClick(EventArgs e)
{
if (Click != null) Click(this, e);
}
... поэтому, если вы наследуете от класса и не вызываете base.OnClick(e), событие Click никогда не будет срабатывать.
Так что да, хотя это и не должно быть так согласно официальным рекомендациям по дизайну, я думаю, что стоит позвонить base.OnInit(e) просто для уверенности.
официальные руководящие принципы разработки рамок рекомендуют иное
официальные руководящие принципы разработки рамок рекомендуют иное
- А они верят? Мне любопытно, я всегда думал наоборот, и чтение руководства по разработке фреймворка и запуск FxCop только укрепили мое мнение. У меня сложилось впечатление, что события всегда должны запускаться из виртуальных методов OnXxx(), которые принимают параметр EventArgs
@Ch00k и @Scott я не знаю - мне самому нравится шаблон On EventName. И да, я один из тех людей, которые виновны в том, что запустили событие с помощью этого метода.
Я думаю, что переопределение метода On* и вызов базового-это правильный путь. Управлять своими собственными событиями как-то неправильно.