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

C# Основы учебник

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

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

Делегат Func в C#

C# содержит встроенные типы обобщенных делегатов Func и Action, поэтому в большинстве случаев вам не нужно вручную определять пользовательские делегаты.

Func - это обобщенный делегат, включенный в пространство имен System. У него может быть нулевой или несколько входных параметров и один выхождение параметры. Последний параметр рассматривается как параметр вывода.

Что такое делегат Func

Делегат Func представляет собой делегат с возвращаемым значением.

Класс Func в пространстве имен System определяет вхождение параметра и вывод параметра делегата, как показано ниже:

namespace System
{    
    public delegate TResult Func<in T, out TResult>(T arg);
}

Последний параметр в фигурных скобках <> рассматривается как тип возвращаемого значения,其余 параметры рассматриваются как типы параметров ввода, как показано на рисунке.

Delегат Func

Delегат Func с двумя входными параметрами и одним параметром вывода будет выглядеть следующим образом.

Delегат Func

Следующий делегат Func принимает два int типа входных параметров и возвращает int значение:

Func<int, int, int> sum;

Вы можете назначить любому методу, который требует двухintпараметры и возвращать одинintзначение.

class Program
{
    static int Sum(int x, int y)
    {
        return x + y;
    }
    static void Main(string[] args)
    {
        Func<int, int, int> add = Sum;
        int result = add(10, 10);
        Console.WriteLine(result); 
    }
}
Вывод:
20

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

Func<int> getRandomNumber;

Пример использования делегата Func

  • Func должен иметь от 0 до 16 входных параметров, возвращая тип по значению. Должен быть результат, не void.

  • Func<int> означает делегат без входных параметров и возвращающим int.

  • Func<object, string, int> означает делегат, передающий параметры object, string и возвращающий int.

  • Func<object, string, int> означает делегат, передающий параметры object, string и возвращающий int.

  • Func<T1, T2, , T3, int> означает делегат, передающий параметры T1, T2, , T3 (генерик) и возвращающий int.

C# Func делегат и анонимный метод

Вы можете использовать ключевое слово delegate, чтобы назначить анонимный метод делегату Func.

Func<int> getRandomNumber = delegate()
                            {
                                Random rnd = new Random();
                                return rnd.Next(1, 100);
                            };

C# Func делегат и Lambda

Func делегат также может использоваться вместе с выражением lambda, как показано ниже:

Func<int> getRandomNumber = () => new Random().Next(1, 100);
// или
Func<int, int, int> Sum = (x, y) => x + y;

 Важно запомнить

  1. Func является встроенным типом делегата.

  2. Типы делегатов Func должны возвращать значение.

  3. Типы делегатов Func могут иметь от 0 до 16 входных параметров.

  4. Типы делегатов Func не позволяют использовать параметры ref и out.

  5. Типы делегатов Func можно использовать вместе с анонимными методами или lambda-выражениями.