English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

C# Уровень 1 учебник

C# Уровень 2 учебник

C# ООП (Объектно-ориентированное программирование)

Анонимные методы в C#

Как следует из названия, анонимные методы - это методы без имени. В C# анонимные методы можно определить с помощью ключевого слова delegate и можно назначить им переменные типа delegate.

В анонимных методах не нужно указывать тип возвращаемого значения, он выводится из тела метода.

public delegate void Print(int value);
static void Main(string[] args)
{
    Print print = delegate(int val) { 
        Console.WriteLine("Внутри анонимного метода. Значение: {0}", val); 
    }
    print(100);
}
Вывод:
Внутри анонимного метода. Значение: 100

Анонимный метод доступа к переменным внешней функции

Анонимные методы могут обращаться к переменным, определенным во внешней функции.

public delegate void Print(int value);
static void Main(string[] args)
{
    int i = 10;
    
    Print prnt = delegate(int val) {
        val += i;
        Console.WriteLine("Анонимный метод: {0}", val); 
    }
    prnt(100);
}
Вывод:
Анонимный метод: 110

Анонимный метод в качестве параметра

Анонимные методы также можно передавать методам, принимающим делегат в качестве параметра.

В следующем примере PrintHelperMethod() использует первый параметр Print делегата:

public delegate void Print(int value);
class Program
{
    public static void PrintHelperMethod(Print printDel, int val)
    { 
        val += 10;
        printDel(val);
    }
    static void Main(string[] args)
    {
        PrintHelperMethod(delegate(int val) { Console.WriteLine("Анонимный метод: {0}", val); }, 100);
    }
}
Вывод:
Анонимный метод: 110

Анонимные методы могут использоваться в качестве обработчиков событий

saveButton.Click += delegate(Object o, EventArgs e)
{ 
    System.Windows.Forms.MessageBox.Show("Сохранение успешно!"); 
}

C# 3.0 ввел лямбда-выражения, которые также работают, как анонимные методы.

Ограничения анонимных методов

  • Он не может содержать прыжковые инструкции, такие как goto, break или continue.

  • Он не может доступ к внешним методам с параметрами ref или out.

  • Он не может拥有 или доступ к небезопасному коду.

  • Не может использоваться слева от оператора is.

 Темы, которые стоит запомнить

  1. Анонимные методы можно определить с помощью ключевого слова delegate

  2. Анонимные методы должны быть присвоены делегату.

  3. Анонимные методы могут доступ к внешним переменным или функциям.

  4. Анонимные методы могут передаваться в качестве параметров.

  5. Анонимные методы могут использоваться в качестве обработчиков событий.