Полное руководство по языку программирования С# 14 и платформе .NET 10 / Делегаты, события и лямбды

Анонимные методы

Начальный ⏱ 2 мин чтения 👁 2 🕓 обновлено 11.08.2026

С делегатами тесно связаны анонимные методы. Анонимные методы используются для создания экземпляров делегатов.

Определение анонимных методов начинается с ключевого слова delegate, после которого идет в скобках список параметров и тело метода в фигурных скобках:


delegate(параметры)
{
	// инструкции
}

Например:


MessageHandler handler = delegate (string mes)
{
    Console.WriteLine(mes);
};
handler("hello world!");

delegate void MessageHandler(string message);

Анонимный метод не может существовать сам по себе, он используется для инициализации экземпляра делегата, как в данном случае переменная handler представляет анонимный метод. И через эту переменную делегата можно вызвать данный анонимный метод.

Другой пример анонимных методов - передача в качестве аргумента для параметра, который представляет делегат:


ShowMessage("hello!", delegate (string mes)
{
    Console.WriteLine(mes);
});

static void ShowMessage(string message, MessageHandler handler)
{
    handler(message);
}

delegate void MessageHandler(string message);

Если анонимный метод использует параметры, то они должны соответствовать параметрам делегата. Если для анонимного метода не требуется параметров, то скобки с параметрами опускаются. При этом даже если делегат принимает несколько параметров, то в анонимном методе можно вовсе опустить параметры:


MessageHandler handler = delegate
{
    Console.WriteLine("анонимный метод");
};
handler("hello world!");    // анонимный метод

delegate void MessageHandler(string message);

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

При этом параметры анонимного метода не могут быть опущены, если один или несколько параметров определены с модификатором out.

Также, как и обычные методы, анонимные могут возвращать результат:


Operation operation = delegate (int x, int y)
{
    return x + y;
};
int result = operation(4, 5);
Console.WriteLine(result);       // 9

delegate int Operation(int x, int y);

При этом анонимный метод имеет доступ ко всем переменным, определенным во внешнем коде:


int z = 8;
Operation operation = delegate (int x, int y)
{
    return x + y + z;
};
int result = operation(4, 5);
Console.WriteLine(result);       // 17

delegate int Operation(int x, int y);

В каких ситуациях используются анонимные методы? Когда нам надо определить однократное действие, которое не имеет много инструкций и нигде больше не используется. В частности, их можно использовать для обработки событий, которые будут рассмотрены далее.

Проверь себя

📋 Тест по теме «Анонимные методы» Тест по теме

Практические задания

Лёгкое Ручная проверка Заполните пропуск в коде (1)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

_____(параметры)
{
	// инструкции
}
Войдите, чтобы отправить решение
Лёгкое Ручная проверка Заполните пропуск в коде (2)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

MessageHandler _____ = delegate (string mes)
{
    Console.WriteLine(mes);
};
handler("hello world!");

delegate void MessageHandler(string message);
Войдите, чтобы отправить решение
Лёгкое Ручная проверка Заполните пропуск в коде (3)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

ShowMessage("hello!", _____ (string mes)
{
    Console.WriteLine(mes);
});

static void ShowMessage(string message, MessageHandler handler)
{
    handler(message);
}

delegate void MessageHandler(string message);
Войдите, чтобы отправить решение
Лёгкое Ручная проверка Заполните пропуск в коде (4)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

MessageHandler handler = delegate
{
    _____.WriteLine("анонимный метод");
};
handler("hello world!");    // анонимный метод

delegate void MessageHandler(string message);
Войдите, чтобы отправить решение
Лёгкое Ручная проверка Заполните пропуск в коде (5)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

Operation _____ = delegate (int x, int y)
{
    return x + y;
};
int result = operation(4, 5);
Console.WriteLine(result);       // 9

delegate int Operation(int x, int y);
Войдите, чтобы отправить решение
Среднее Ручная проверка Восстановите код по памяти (1)
+20 XP

В этом фрагменте кода урока пропущены два ключевых элемента. Впишите оба пропущенных значения через запятую в порядке появления (например: x, 5).

_____(параметры)
{
	// инструкции
}
Войдите, чтобы отправить решение
Среднее Ручная проверка Восстановите код по памяти (2)
+20 XP

В этом фрагменте кода урока пропущены два ключевых элемента. Впишите оба пропущенных значения через запятую в порядке появления (например: x, 5).

MessageHandler handler = _____ (string mes)
{
    Console.WriteLine(mes);
};
handler("hello _____!");

delegate void MessageHandler(string message);
Войдите, чтобы отправить решение
Среднее Ручная проверка Расставьте строки кода в правильном порядке
+20 XP

Строки кода из примера этого урока перемешаны. Впишите их в правильном порядке, каждую строку — с новой строки.

delegate(параметры)
	// инструкции
{
}
Войдите, чтобы отправить решение
Сложное Ручная проверка Объясните и модифицируйте пример из урока «Анонимные методы»
+30 XP

Опишите своими словами, что делает приведённый пример кода из урока «Анонимные методы», и предложите одно осмысленное изменение (например, другое входное значение или дополнительное условие). Приведите итоговый код.

delegate(параметры)
{
	// инструкции
}
Войдите, чтобы отправить решение
Сложное Ручная проверка Найдите потенциальную проблему в коде урока «Анонимные методы»
+30 XP

Изучите приведённый фрагмент кода и опишите, при каких входных данных или условиях он может сработать не так, как ожидается (граничный случай, отсутствие проверки и т.п.). Предложите исправленный вариант.

MessageHandler handler = delegate (string mes)
{
    Console.WriteLine(mes);
};
handler("hello world!");

delegate void MessageHandler(string message);
Войдите, чтобы отправить решение
Мини-проект Ручная проверка Мини-проект по теме «Анонимные методы»
+50 XP

Соберите небольшую программу, которая последовательно демонстрирует ключевые идеи урока. Программа должна быть рабочей и содержать минимум два самостоятельно написанных фрагмента, а не просто копию примера из урока.

Войдите, чтобы отправить решение
Домашнее задание Ручная проверка Домашнее задание по теме «Анонимные методы»
+25 XP

Напишите собственную небольшую программу, применяющую материал темы «Анонимные методы». Используйте не менее одной конструкции, показанной в примерах урока. Прикрепите код решения и краткое описание того, что он делает.

Войдите, чтобы отправить решение

Обсуждение (0)

Войдите, чтобы оставить комментарий.