Ответ
В .NET предоставлен набор общих делегатов, которые покрывают большинство сценариев, избавляя от необходимости объявлять собственные. Основные из них:
-
Action— делегат, который не возвращает значение (void). Может принимать от 0 до 16 входных параметров.// Делегат для вывода строки Action<string> logAction = message => Console.WriteLine($"[LOG]: {message}"); logAction("Application started."); -
Func— делегат, который возвращает значение. Последний универсальный параметр всегда указывает на тип возвращаемого значения.// Делегат для сложения двух чисел Func<int, int, int> addFunc = (x, y) => x + y; int sum = addFunc(10, 5); // Результат: 15 -
Predicate<T>— специализированный делегат, возвращающийbool. По сути, это алиас дляFunc<T, bool>. Часто используется в методах коллекций, например,List.FindAll.// Делегат для проверки на чётность Predicate<int> isEvenPredicate = number => number % 2 == 0; bool result = isEvenPredicate(4); // true -
EventHandlerиEventHandler<TEventArgs>— стандартные делегаты для реализации событий по соглашениям .NET.public event EventHandler<FileLoadedEventArgs> FileLoaded; -
Comparison<T>— делегат для сравнения двух объектов одного типа, возвращающий целое число (аналогичноFunc<T, T, int>). Используется в методах сортировки.Comparison<string> lengthComparer = (x, y) => x.Length.CompareTo(y.Length);
Использование этих встроенных делегатов делает код стандартизированным, читаемым и уменьшает количество объявлений пользовательских делегатов.