猿教程 Logo

C# Func

我们在前面的章节中学到了委托,一个委托可以定义如下。

相关实例:

public delegate int SomeOperation(int i, int j);

class Program
{

    static int Sum(int x, int y)
    {
        return x + y;
    }

    static void Main(string[] args)
    {
        SomeOperation add = Sum;

        int result = add(10, 10);

        Console.WriteLine(result); 
    }
}
运行结果:
20

C#3.0包括内置的泛型委托类型Func和Action,因此您不需要像上面那样定义自定义委托。

Func是包含在System命名空间中的通用委托。 它具有零个或多个输入参数和一个输出参数。 最后一个参数被视为输出参数。

例如,一个Func委托,它接受一个输入参数和一个输出参数,在System命名空间中定义如下:

相关实例:

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

尖括号<>中的最后一个参数被视为返回类型,其余参数被视为输入参数类型,如下图所示。


具有两个输入参数和一个输出参数的Func委托将表示如下。


以下Func类型委托与上述SomeOperation委托相同,它需要两个int类型的输入参数,并返回一个int类型的值:

相关实例:

Func<int, int, int> sum;

您可以为上述func委托指定任何方法,该方法需要两个int参数并返回一个int值。 现在,您可以在第一个示例中使用Func委托代替someOperation委托。

相关实例:

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委托没有任何输入参数,它只包括一个out参数。

相关实例:

Func<int> getRandomNumber;

使用匿名方法的Func:

您可以使用delegate关键字为Func委派指定一个匿名方法。

相关实例:

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

Func与lambda表达式:

Func委托也可以与lambda表达式一起使用,如下所示:

相关实例:

Func<int> getRandomNumber = () => new Random().Next(1, 100);

//Or 

Func<int, int, int>  Sum  = (x, y) => x + y;
要点
  1. Func是内置的委托类型。 

  2. Func委托类型必须返回一个值。 

  3. Func委托类型可以有0到16个输入参数。 

  4. Func委托类型可以与匿名方法或lambda表达式一起使用。


版权声明:本站所有教程均为本站原创或翻译,转载请注明出处,请尊重他人劳动果实。请记住本站地址:www.yuanjiaocheng.net (猿教程) 作者:卿文刚
本文标题: C#环境
本文地址:http://www.yuanjiaocheng.net/CSharp/csharp-func.html