Объявление и использование делегатов в C#

Автор: Topol Пятница, Июнь 8th, 2012 Нет комментариев

Рубрика: Программирование

Делегат – это класс, который хранит ссылку на метод.  С помощью делегата в C# (си шарп) можно передавать имя функции в качестве аргумента. Можно сказать, что делегат служи оболочкой для существующего метода. Делегат является производной от встроенного во Framework класса Delegate. Чтобы использовать делегат, нужно создать его экземпляр, который является объектом. Этот объект можно передавать как параметр или назначать ему свойство. Поэтому метод может вызывать делегат и принимать его в качестве параметра. Делегат может ссылаться на любой тип объекта, если для этого объекта есть метод.

Рассмотрим использование делегата на простом примере. Объявление делегата похоже на объявление метода, с добавлением ключевого слова delegate. Объявим делегат целого типа integer с именем BinaryOp. У делегата обязательно должны быть объявлены параметры. У нас их два: int x, int y. Затем объявляем класс SimpleMath, и создаем в нем два метода, сложение (Add) и вычитание (Subt). Сейчас мы научимся в головной программе вызывать метод Add() через делегат.

public delegate int BinaryOp(int x, int y);
public class SimpleMath
{
      public static int Add(int x, int y)
      { return x+y; }
      public static int Subt (int x, int y)
      { return x-y; }
}

//головная программа
// создание объекта BinaryOp, указывающего на SimpleMath.Add():

BinaryOp b = new BinaryOp(SimpleMath.Add);

// Вызов метода Add() с помощью делегата:

Console.WriteLine("10+10 равно {0}", b(10,10));

В головной программе мы создали экземпляр b для делегата BinaryOp, и использовали делегат как метод, то есть, выражаясь профессиональным языком, вызвали делегат для созданного экземпляра. Вызов метода Add, выполненный в делегате, передается делегатом в этот метод. Делегат передает в метод параметры (10,10), метод возвращает значение, а делегат передает его в вызывающий объект b.

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

Источник: cisharp.com

Оставить комментарий

Чтобы оставлять комментарии Вы должны быть авторизованы.

Похожие посты