C#包含內(nèi)置的泛型委托類型 Func 和 Action,因此在大多數(shù)情況下您不需要手動定義自定義委托。
Func是包含在 System 命名空間中的泛型委托。它有零個或多個輸入?yún)?shù)和一個 out 參數(shù)。最后一個參數(shù)被視為 out 參數(shù)。
Func 委托代表有返回類型的委托。
Func 在 System 命名空間中定義了一個 in 參數(shù)和一個 out 參數(shù) 的委托,如下所示:
namespace System { public delegate TResult Func<in T, out TResult>(T arg); }
尖括號中的最后一個參數(shù)<>被視為返回類型,其余參數(shù)被視為輸入?yún)?shù)類型,如下圖所示。
具有兩個輸入?yún)?shù)和一個輸出參數(shù)的Func委托將如下所示。
以下Func委托接受兩個int類型的輸入?yún)?shù),并返回一個int類型的值:
Func<int, int, int> sum;
您可以為上面的func委托分配任何方法,這些方法需要兩個int參數(shù)并返回一個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個不同類型的輸入?yún)?shù)。但是,它必須包含用于結(jié)果的out參數(shù)。例如,以下Func委托沒有任何輸入?yún)?shù),并且僅包含out參數(shù)。
Func<int> getRandomNumber;
Func 至少0個輸入?yún)?shù),至多16個輸入?yún)?shù),根據(jù)返回值泛型返回。必須有返回值,不可void。
Func<int> 表示沒有輸入?yún)?shù),返回值為int類型的委托。
Func<object,string,int> 表示傳入?yún)?shù)為object, string ,返回值為int類型的委托。
Func<object,string,int> 表示傳入?yún)?shù)為object, string, 返回值為int類型的委托。
Func<T1,T2,,T3,int> 表示傳入?yún)?shù)為T1,T2,,T3(泛型),返回值為int類型的委托。
您可以使用 delegate 關(guān)鍵字將匿名方法分配給 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 是內(nèi)置委托類型。
Func 委托類型必須返回一個值。
Func 委托類型可以具有零到16個輸入?yún)?shù)。
Func 委托不允許 ref 和 out參數(shù)。
Func 委托類型可以與匿名方法或lambda表達式一起使用。