Ключевое слово delegate
Ключевое слово delegate задаёт именованный тип
функции: список параметров и тип возвращаемого значения
(или void). Переменная этого типа хранит ссылку
на метод; вызов идёт как у функции через имя переменной.
Так описывают колбэки до использования готовых
Action и Func.
Синтаксис
delegate void Notify(string text);
Notify handler = ИмяМетода;
handler("abcde");
Пример
Давайте объявим делегат и вызовем метод через переменную:
using System;
delegate void Notify(string text);
class Program
{
static void Print(string text)
{
Console.WriteLine(text);
}
static void Main()
{
Notify note = Print;
note("abcde");
}
}
Результат выполнения кода:
"abcde"
Пример
Давайте переназначим переменную делегата другому методу:
using System;
delegate void Notify(string text);
class Program
{
static void Print(string text)
{
Console.WriteLine(text);
}
static void Show(string text)
{
Console.WriteLine(text.Length);
}
static void Main()
{
Notify note = Print;
note = Show;
note("12345");
}
}
Результат выполнения кода:
5
Пример
Давайте объявим делегат, который возвращает int:
using System;
delegate int LengthOf(string text);
class Program
{
static int GetLength(string text)
{
return text.Length;
}
static void Main()
{
LengthOf measure = GetLength;
int res = measure("abcde");
Console.WriteLine(res);
}
}
Результат выполнения кода:
5
Смотрите также
-
класс
Action,
который задаёт делегат без результата -
группа методов
method group,
которую присваивают делегату -
мультикаст
multicast,
который объединяет несколько методов -
ключевое слово
event,
которое часто использует тип делегата