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

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

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

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

Заметки

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

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

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

Пример

// 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: {0}", multByTwo);

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

        double square = ma2(5);
        Console.WriteLine("square: {0}", square);

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

        Console.WriteLine("cube: {0}", cube);
    }
    // Output: 
    // multByTwo: 9 
    // square: 25 
    // cube: 83.740234375
}

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

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

См. также

Ссылки

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

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

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

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

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

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

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

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

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

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