Поделиться через


События и обратные вызовы

Метод обратного вызова — это метод , который автоматически активируется делегатом по завершении операции или процесса. Например, один из шаблонов асинхронного проектирования использует делегатов AsyncCallback для указания кода, который будет выполняться, когда завершится асинхронная операция. Этот шаблон проектирования используется в методе BeginWrite, который использует обратный вызов для обработки результатов асинхронной операции записи.

События являются механизмами, подобными обратным вызовам. События позволяют пользователю определить код, который будет выполняться при определенных условиях, обычно связанных с изменением состояния или началом либо окончанием процесса. События проще в использовании, чем обратные вызовы, потому что синтаксис и инструменты языка предоставляют единый механизм для распознавания и обработки событий. Также, события обрабатываются делегатами, называемыми обработчиками событий, которые имеют хорошо определенные сигнатуры. Дополнительные сведения о событиях см. в разделе Разработка событий.

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

Рекомендуется использовать обратные вызовы для того, чтобы пользовательский код мог быть выполнен .NET Framework.

Рекомендуется использовать события для того, чтобы предоставить пользователю возможность управлять поведением объекта .NET Framework без необходимости разбираться с устройством объекта.

События предпочтительнее простых обратных вызовов, так как они знакомы более широкому кругу разработчиков и интегрированы в Visual Studio.

Избегайте использования обратных вызовов в API, чувствительных к производительности.

В то время как обратные вызовы и события легки в понимании и использовании для многих разработчиков, они менее предпочтительны, чем Виртуальные члены с точки зрения производительности и использования памяти.

Следует понимать, что, вызывая делегата, вы заставляете выполняться произвольный код, что может повлиять на безопасность, правильность и совместимость.

События и обратные вызовы позволяют выполнять произвольный код в контексте среды CLR. При анализе кода и безопасности следует тщательно изучить вопросы расширяемости для определения уязвимых мест.

Охраняется авторским правом Copyright 2005 Microsoft Corporation. Все права защищены.

Фрагменты — © Addison-Wesley Corporation. Все права защищены.

Для дополнительной информации о разработке руководящих принципов, смотрите "руководства по разработке рамок: Конвенций, идиомы и шаблоны для повторного использования.NET библиотек"книга, Кшиштоф Cwalina и Брэд Абрамс, опубликованных Addison-Wesley, 2005 года.

См. также

Другие ресурсы

Разработка с обеспечением расширяемости

Руководство по разработке библиотек классов