Что такое делегат Action в C#?

«Что такое делегат Action в C#?» — вопрос из категории C# Core, который задают на 25% собеседований C# Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Action — это предопределенный обобщенный делегат в пространстве имен System, который представляет метод, не возвращающий значение (void). Он может принимать от 0 до 16 входных параметров.

Основное назначение: передача методов как объектов (коллбэки) для последующего выполнения, часто в сценариях обратных вызовов, событий или LINQ.

Примеры использования:

// Action без параметров
Action greet = () => Console.WriteLine("Hello, World!");
greet();

// Action с одним параметром
Action<string> logError = (message) => Console.WriteLine($"[ERROR] {message}");
logError("File not found");

// Action с несколькими параметрами
Action<string, int> printDetails = (name, age) => 
{
    Console.WriteLine($"Name: {name}");
    Console.WriteLine($"Age: {age}");
};
printDetails("Alice", 30);

// Использование в LINQ для обработки коллекции
List<int> numbers = new List<int> { 1, 2, 3 };
numbers.ForEach(n => Console.WriteLine(n * n)); // ForEach принимает Action<int>

Практическое применение:

  • Коллбэки в асинхронных операциях (например, продолжения в Task).
  • Обработчики событий и реализации паттернов типа Publisher/Subscriber.
  • Параметризация поведения методов (стратегия, команда).

Ключевое отличие от Func<T>: Func<T> всегда возвращает значение типа T, в то время как Action всегда возвращает void.