Разница между методом OnLoad и событием Load?

В чем разница между методом OnLoad и событием Load? Я разрабатываю элементы управления WinForm. Должен ли я зарегистрироваться на событие Load или переопределить метод OnLoad? Каковы преимущества и недостатки каждого из них?


person mokaymakci    schedule 08.07.2009    source источник


Ответы (3)


Я бы предпочел переопределить OnLoad, чтобы сэкономить циклы ЦП для вызова обработчика событий.

Общий шаблон заключается в переопределении метода, если вы наследуете элемент управления; в противном случае подпишитесь на событие.

Но не забудьте вызвать метод OnLoad базового класса, потому что именно там вызывается событие Load.

person Thomas Freudenberg    schedule 08.07.2009
comment
Согласно Microsoft, перегрузка метода OnLoad является «… предпочтительным методом обработки события в производном классе» (см. msdn.microsoft.com/en-us/library/) - person Troy Moon; 31.08.2009
comment
@TroyMoon Разве это не то, что сказал Томас? - person Camilo Martin; 18.02.2013

Метод OnLoad вызывает событие Load. Это стандартный шаблон для классов фреймворка и обычно рекомендуемый — для любого события Foo у вас есть виртуальный защищенный метод OnFoo, который вызывает это событие; и ни один другой метод класса не вызывает событие напрямую, а всегда вызывает OnFoo.

Если вам нужно обработать событие на this, обычно проще и быстрее переопределить OnFoo.

person Pavel Minaev    schedule 08.07.2009

OnLoad — это обработчик событий по умолчанию, используемый в VB.NET для обработки события Load. Обычно я переопределяю этот метод, когда мне нужно прикрепить код к событию загрузки. Существуют также функции по умолчанию для других событий жизненного цикла страницы: OnPreRender , OnInit и т. д.

person regex    schedule 08.07.2009
comment
Ой... Только что понял, что вы спрашивали о winform. Игнорировать ссылку на жизненный цикл страницы. То же самое относится хотя. - person regex; 08.07.2009
comment
Кроме того, то же самое происходит и с другими языками .NET, такими как C# (сама платформа .NET в основном написана на C#). - person Camilo Martin; 18.02.2013