2010-08-17 3 views
3

Мы можем вызвать методы обратного вызова, используя делегаты. Например,Для чего нужны события для обратного вызова?

общественный делегат bool ContinueProcessing();

// позже в коде, мы можем написать,

ContinueProcessing ср = новый ContinueProcessing (IsDataAvailable);

cp + = новое ContinueProcessing (IsTransactionComplete);

// позже в коде Defination методов

BOOL IsDataAvailable() { возвращает истину; }

bool IsTransactionComplete() { return true; }

cp.Invoke();

Вышеупомянутый вызов вызовет два булева метода один за другим. Почему нам нужны «события»? Какова цель «событий»?

ответ

9

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

Делегаты предоставляют инкапсуляцию «это действие, которое я хочу принять», и события обеспечивают инкапсуляцию паба/подмодели.

Для получения дополнительной информации см. Мой article on events.

+0

спасибо, что это полезно – Ashish

0

Делегаты очень общие. Они могут использоваться в любом контексте: в пределах одного класса, между классами, в статических методах и т. Д.

События более конкретные - они специально разработаны для использования для одного класса для подписки на событие, поднятое другим классом ,

Делегат является (видом) безопасным по типу указателем на функцию, тогда как событие представляет собой оболочку вокруг делегата, которая предоставляет стандартный интерфейс для подписки/отмены подписки/повышения события.

+0

События добавляют только «Добавить» и «Удалить» методы вокруг делегата. Мы можем добиться всего, не упоминая «События». Почему вы говорите, что делегаты более общие? – Ashish

+0

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

0

Похоже, что ключевое слово 'event' является модификатором объявления делегата, который позволяет ему быть включенным в интерфейс, ограничивает его вызовом из класса, объявляющего его, предоставляет ему пару настраиваемых accessors (добавляет и удаляет) и заставляет подпись делегата (при использовании в рамках платформы .NET).

Смежные вопросы