C# Func 委托

C#包含內(nèi)置的泛型委托類型 Func 和 Action,因此在大多數(shù)情況下您不需要手動定義自定義委托。

Func是包含在 System 命名空間中的泛型委托。它有零個或多個輸入?yún)?shù)和一個 out 參數(shù)。最后一個參數(shù)被視為 out  參數(shù)。

什么是Func委托

Func 委托代表有返回類型的委托。

Func 在 System 命名空間中定義了一個 in 參數(shù)和一個 out 參數(shù) 的委托,如下所示:

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

尖括號中的最后一個參數(shù)<>被視為返回類型,其余參數(shù)被視為輸入?yún)?shù)類型,如下圖所示。

Func 委托

具有兩個輸入?yún)?shù)和一個輸出參數(shù)的Func委托將如下所示。

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 委托示例說明

  • 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類型的委托。

C# Func 委托與匿名方法

您可以使用 delegate 關(guān)鍵字將匿名方法分配給 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 是內(nèi)置委托類型。

  2. Func 委托類型必須返回一個值。

  3. Func 委托類型可以具有零到16個輸入?yún)?shù)。

  4. Func 委托不允許 ref 和 out參數(shù)。

  5. Func 委托類型可以與匿名方法或lambda表達式一起使用。

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清