logo search
Лекции по ая

Делегаты

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

Для того чтобы создать делегат используется ключевое слово delegate. Для того чтобы создать делегат используется ключевое слово delegate. За ним тип возвращаемого значения того метода, который может быть передан в делегат. Далее указывается имя делегата и несколько параметров (могут отсутвовать), которые принимает целевой метод

delegate void MyDelegate();

Для работы с делегатом, требуется создать объект нашего типа-делегата. Делается это используя конструктор:

MyDelegate myDelegate = new MyDelegate(MyMethod);

Для запуска целевого метода следует вызвать объект нашего делегата Данный делегат знает все о сигнатуре передаваемого ему метода. Нельзя передать в делегат метод, сигнатура которого не соответствует заданной при объявлении типа-делегата

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

delegate int IntOperation(int i, int j);

class Program

{

static int Sum(int x, int y)

{

return x + y;

}

static int Prz(int x, int y)

{

return x * y;

}

static int Del(int x, int y)

{

return x / y;

}

static void Main()

{

IntOperation op1 = new IntOperation(Sum);

int result = op1(5, 10);

Console.WriteLine("Сумма: " + result);

op1 = new IntOperation(Prz);

result = op1(5, 10);

Console.WriteLine("Произведение: " + result);

Console.ReadLine();

}

}

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