English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
C# содержит встроенные типы обобщенных делегатов Func и Action, поэтому в большинстве случаев вам не нужно вручную определять пользовательские делегаты.
Func - это обобщенный делегат, включенный в пространство имен System. У него может быть нулевой или несколько входных параметров и один выхождение параметры. Последний параметр рассматривается как параметр вывода.
Делегат Func представляет собой делегат с возвращаемым значением.
Класс Func в пространстве имен System определяет вхождение параметра и вывод параметра делегата, как показано ниже:
namespace System { public delegate TResult Func<in T, out TResult>(T arg); }
Последний параметр в фигурных скобках <> рассматривается как тип возвращаемого значения,其余 параметры рассматриваются как типы параметров ввода, как показано на рисунке.
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 должен иметь от 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.
Вы можете использовать ключевое слово delegate, чтобы назначить анонимный метод делегату Func.
Func<int> getRandomNumber = delegate() { Random rnd = new Random(); return rnd.Next(1, 100); };
Func делегат также может использоваться вместе с выражением lambda, как показано ниже:
Func<int> getRandomNumber = () => new Random().Next(1, 100); // или Func<int, int, int> Sum = (x, y) => x + y;
Func является встроенным типом делегата.
Типы делегатов Func должны возвращать значение.
Типы делегатов Func могут иметь от 0 до 16 входных параметров.
Типы делегатов Func не позволяют использовать параметры ref и out.
Типы делегатов Func можно использовать вместе с анонимными методами или lambda-выражениями.