delegate (справочник по C#)

Обновлен: Ноябрь 2007

Объявление типа делегата аналогично подписи метода. Оно имеет возвращаемое значение и некоторое число параметров какого-либо типа:

public delegate void TestDelegate(string message);
public delegate int TestDelegate(MyType m, long num);

Ключевое слово delegate используется для объявления ссылочного типа, который может быть использован для инкапсуляции именованного или анонимного метода. Делегаты аналогичны используемым в языке C++ указателям на функции, но являются строго типизированными и безопасными. Сведения о применении делегатов см. в разделах Делегаты и Универсальные методы-делегаты.

Заметки

Делегаты являются основой событий.

Экземпляры делегата могут создаваться путем его связывания с именованным или анонимным методом. Дополнительные сведения см. в разделах Именованные методы и Анонимные методы.

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

Пример

// Declare delegate -- defines required signature:
delegate double MathAction(double num);

class DelegateTest
{
    // Regular method that matches signature:
    static double Double(double input)
    {
        return input * 2;
    }

    static void Main()
    {
        // Instantiate delegate with named method:
        MathAction ma = Double;

        // Invoke delegate ma:
        double multByTwo = ma(4.5);
        Console.WriteLine(multByTwo);

        // Instantiate delegate with anonymous method:
        MathAction ma2 = delegate(double input)
        {
            return input * input;
        };

        double square = ma2(5);
        Console.WriteLine(square);

        // Instantiate delegate with lambda expression
        MathAction ma3 = s => s * s * s;
        double cube = ma3(4.375);

        Console.WriteLine(cube);
    }
}

Спецификация языка C#

Дополнительные сведения см. в следующих разделах документа Спецификация языка C#:

  • 1.11 Делегаты

  • 15 Делегаты

См. также

Основные понятия

Руководство по программированию в C#

Ссылки

Ключевые слова C#

Ссылочные типы (Справочник по C#)

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

События (Руководство по программированию в C#)

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

Анонимные методы (Руководство по программированию в C#)

Другие ресурсы

Справочник по C#