Помощь в написании студенческих работ
Антистрессовый сервис

Делегаты в C#

РефератПомощь в написанииУзнать стоимостьмоей работы

Для того чтобы воспользоваться делегатом, необходимо создать его экземпляр и задать имена методов, на которые он будет ссылаться. При вызове экземпляра делегата вызываются все заданные в нем методы. Использование делегата имеет тот же синтаксис, что и вызов метода. Если делегат хранит ссылки на несколько методов, они вызываются последовательно в том порядке, в котором были добавлены в делегат… Читать ещё >

Делегаты в C# (реферат, курсовая, диплом, контрольная)

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

Описание делегатов

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

[атрибуты] [спецификаторы] delegate ([параметры]).

Спецификаторы делегата имеют тот же смысл, что и для класса, причем допускаются только спецификаторы new, public, protected, internal и private. Тип описывает возвращаемое значение методов, вызываемых с помощью делегата, а необязательными параметрами делегата являются параметры этих методов. Делегат может хранить ссылки на несколько методов и вызывать их поочередно, естественно, что сигнатуры всех методов должны совпадать.

Пример описания делегата: public delegate void Dd (int i);

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

Делегат, как и всякий класс, представляет собой тип данных. Его базовым классом является класс System. Delegate. Наследовать от делегата нельзя.

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

Использование делегатов

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

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

  • · получения возможности определять вызываемый метод не при компиляции, а динамически во время выполнения программы;
  • · обеспечения связи между объектами по типу «источник — наблюдатель»;
  • · создания универсальных методов, в которые можно передавать другие методы;
  • · поддержки механизма обратных вызовов.

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

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

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

  • · сигнатура методов должна в точности соответствовать делегату;
  • · методы могут быть как статическими, так и обычными методами класса;
  • · каждому методу в списке передается один и тот же набор параметров;
  • · если параметр передается по ссылке, изменения параметра в одном методе отразятся на его значении при вызове следующего метода;
  • · если параметр передается с ключевым словом out или метод возвращает значение. Результатом выполнения делегата является значение, сформированное последним из методов списка (в связи с этим рекомендуется формировать списки только из делегатов, имеющих возвращаемое значение типа voi d);
  • · если в процессе работы метода возникло исключение, не обработанное в том же методе, последующие методы в списке не выполняются, а происходит поиск обработчиков в объемлющих делегат блоках;
  • · попытка вызвать делегат, в списке которого нет ни одного метода, вызывает генерацию исключения System. Null Ref erenceExcepti on.
Показать весь текст
Заполнить форму текущей работой