"Func"
на самом деле семейство классов в пространстве имен System
, а именно:
Func<TResult>
(0 параметров), Func<T,TResult>
(1 параметр), Func<T1,T2,TResult>
(2 параметра) ... Func(17)
(16 параметров).
Всего имеется 17 различных классов «Func», поддерживающих от 0 до 16 параметров. Они могут совместно использовать имя в коде («Func»), даже если они на самом деле различных типов (Func
, Func'
, Func''
и т. Д.) Благодаря тому, как Generics работает в .NET - число генериков определяет / устраняет неоднозначность , какой используется фактический тип.
Счастливого кодирования.
Что касается преобразования между делегатами, это может быть полезно (работает в LINQPad , "Программа C #"):
delegate int MyDelegate (int y);
void Main()
{
Func<int,int> fun1 = (q) => q * q;
MyDelegate del = new MyDelegate(fun1); // Convert the "Func" delegate to custom...
Func<int,int> fun2 = new Func<int,int>(del); // ...and back
}