full sharp / 15Делегаты
.pptxДЕЛЕГАТЫ
Делегат это объект указывающий на функцию
Делегаты являются ссылками на методы, инкапсулирующими настоящие указатели и предоставляющими удобные сервисы для работы с ними.
При создании экземпляра делегата можно связать этот экземпляр с любым методом с совместимой сигнатурой. Метод можно запустить (или вызвать) с помощью экземпляра делегата.
Делегаты используются для передачи методов в качестве аргументов к другим методам.
Обработчики событий — это нe что иное, как методы, вызываемые с помощью делегатов.
using System;
// Основной класс приложения.
class App
{
// Опишем собственный делегат. // В этом случае — это не что иное, как описание // вложенного класса, просто оно замаскировано // при помощи специального ключевого слова языка. // Соответственно, для того чтобы использовать данный // класс, придется создать его экземпляр.
delegate void MyDelegate(string s);
// Это функция, которую мы будем использовать для проверки // работоспособности делегата. // Она является статической и для ее вызова // не требуется наличия экземпляра класса.
static void MyHandler(string s)
{
|
// Просто выведем на консоль единственный аргумент, // переданный функции. |
Console.WriteLine(s);
}
// Точка входа в приложение.
static void Main()
{
|
// Создадим экземпляр нашего делегата (типа! (класса!)), // описанного нами ранее, передав ему в качестве // параметра конструктора |
|
ссылку на функцию, // которую мы хотим связать с делегатом. |
MyDelegate del = new MyDelegate(MyHandler);
|
// Вызовем функцию через делегат, // как видите, все достаточно просто, мы можем пользоваться // экземпляром делегата как функцией. |
del("Hello World");
}
};
Делегаты похожи на указатели функций в C++, но являются типобезопасными.
Делегаты допускают передачу методов в качестве параметров.
Делегаты можно использовать для задания функций обратного вызова.
Делегаты можно связывать друг с другом; например, несколько методов можно вызвать по одному событию.
Точное соответствие методов сигнатуры делегата не требуется.
СВОЙСТВА