C# предоставляет несколько встроенных типов делегатов, которые упрощают работу с методами. Эти делегаты широко используются в LINQ, событиях и обработчиках данных.
Action
Action
— это делегат, который представляет метод без возвращаемого значения. Он может принимать от 0 до 16 параметров.
using System;
class Program
{
static void PrintMessage(string message)
{
Console.WriteLine(message);
}
static void Main()
{
Action<string> action = PrintMessage;
action("Hello, world!");
}
}
Func
Func
— это делегат, который представляет метод с возвращаемым значением. Он может принимать до 16 параметров, а последний параметр всегда обозначает возвращаемый тип.
using System;
class Program
{
static int Sum(int a, int b) => a + b;
static void Main()
{
Func<int, int, int> func = Sum;
Console.WriteLine(func(5, 3));
}
}
Predicate
Predicate<T>
— это делегат, который принимает один параметр типа T
и возвращает bool
. Используется для проверки условия.
using System;
class Program
{
static bool IsPositive(int number) => number > 0;
static void Main()
{
Predicate<int> predicate = IsPositive;
Console.WriteLine(predicate(10)); // True
Console.WriteLine(predicate(-5)); // False
}
}
Comparison
Comparison<T>
— это делегат, который сравнивает два объекта типа T
и возвращает int
(-1, 0 или 1), аналогично IComparer<T>
.
using System;
using System.Collections.Generic;
class Program
{
static int CompareNumbers(int x, int y) => x.CompareTo(y);
static void Main()
{
Comparison<int> comparison = CompareNumbers;
List<int> numbers = new List<int> { 5, 2, 8, 1 };
numbers.Sort(comparison);
numbers.ForEach(Console.WriteLine);
}
}
Встроенные делегаты Action
, Func
, Predicate
и Comparison
помогают писать компактный и удобочитаемый код, упрощая работу с методами.