Что такое делегаты и для чего они нужны? — КиберПедия 

Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...

Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...

Что такое делегаты и для чего они нужны?

2017-11-27 222
Что такое делегаты и для чего они нужны? 0.00 из 5.00 0 оценок
Заказать работу

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

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

[ атрибуты ] [ спецификаторы ] delegate тип имя_делегата ([ параметры ])

Спецификаторы делегата имеют тот же смысл, что и для класса, причем допускаются только спецификаторы new, public, protected, internal и private.

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

Примерописанияделегата:

public delegate void D (int i):

Здесь описан тип делегата, который может хранить ссылки на методы, возвращающие void и принимающие один параметр целого типа.

Объявление делегата можно размещать непосредственно в пространстве имен или внутри класса.

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

Делегаты применяются в основном для следующих целей:

• получения возможности определять вызываемый метод не при компиляции,

• а динамически во время выполнения программы;

• обеспечения связи между объектами по типу «источник — наблюдатель»;

• создания универсальных методов, в которые можно передавать другие методы;

• поддержки механизма обратных вызовов.

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

Добавление метода в список выполняется либо с помощью метода Combine, унаследованного от класса System.Delegate, либо, что удобнее, с помощью перегруженной операции сложения.

При вызове последовательности методов с помощью делегата необходимо учитывать

следующее;

• сигнатура методов должна в точности соответствовать делегату;

• методы могут быть как статическими, так и обычными методами класса;

• каждому методу в списке передается один и тот же набор параметров;

• если параметр передается по ссылке, изменения параметра в одном методе отразятся

• на его значении при вызове следующего метода;

• если параметр передается с ключевым словом out или метод возвращает значение, результатом выполнения делегата является значение, сформированное последним из методов списка (в связи с этим рекомендуется формировать списки только из делегатов, имеющих возвращаемое значение типа void);

• если в процессе работы метода возникло исключение, не обработанное в том же методе, последующие методы в списке не выполняются, а происходит поиск обработчиков в объемлющих делегат блоках;

• попытка вызвать делегат, в списке которого нет ни одного метода, вызывает генерацию исключения System.NullReferenceException.

Рассмотрим применение делегатов для обеспечения связи между объектами по типу «источник — наблюдатель». В результате разбиения системы на множество совместно работающих классов появляется необходимость поддерживать согласованное состояние взаимосвязанных объектов. При этом желательно избежать жесткой связанности классов, так как это часто негативно сказывается на возможности многократного использования кода.

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

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


Поделиться с друзьями:

Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...

Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...

Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...

Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.009 с.