Func的介绍——c#封装的代理

经常看到  Func<int, bool>...这样的写法,看到这样的就没有心思看下去了。我们学技术还是需要静下心来。

对Func<int,bool>的Func转到定义看它的解释:

复制代码
    // 摘要:
    //     封装一个具有一个参数并返回 TResult 参数指定的类型值的方法。
    //
    // 参数:
    //   arg:
    //     此委托封装的方法的参数。
    //
    // 类型参数:
    //   T:
    //     此委托封装的方法的参数类型。
    //
    //   TResult:
    //     此委托封装的方法的返回值类型。
    //
    // 返回结果:
    //     此委托封装的方法的返回值。
    [TypeForwardedFrom("System.Core, Version=3.5.0.0, Culture=Neutral, PublicKeyToken=b77a5c561934e089")]
    public delegate TResult Func<in T, out TResult>(T arg);
复制代码

in T 代表输入参数                     1
out TResult 表示输出参数          2
再看返回值是 TResult                3
构造方法需要的参数是T               4

1与4,2与3进行对比,你发现了什么?!参数类型一样对吧。         5

Func是一个委托,委托里面可以存方法,那我们就来建一个与之匹配的方法:
以Func<int,bool>为例:

private bool IsNumberLessThen5(int number)

{return number < 5;} 

Func<int,bool> f1 = IsNUmberLessThen5;

调用:
bool flag= f1(4);

以下是具体代码:

复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Func<int, bool> f1 = IsNumberLessThen5;
            bool flag = f1(4);
            Console.WriteLine(flag);

            //以下是其它的用法,与IsNumberLessThen5作用相同。只是写法不同而已。
            Func<int, bool> f2 = i => i < 5;  //这里采用的是lamda表达式,相当于匿名函数 ,红色的i是参数;蓝色的i<5是返回值
            Func<int, bool> f3 = (i) => { return i < 5; };   //这个也采用的也是lamda表达式,相当于匿名函数,红色(i)相当于方法参数,{return i<5} 是方法体,只是它们是匿名函数                                                                   
            Func<int, bool> f4 = delegate(int i) { return i < 5; }; //这个是匿名委托,只是没有声明委托名称;
            flag = f2(4); Console.WriteLine(flag);
            flag = f3(4); Console.WriteLine(flag);
            flag = f4(4); Console.WriteLine(flag);            

            Console.ReadLine();
        }

        private static bool IsNumberLessThen5(int number)
        {
            if (number < 5)
                return true;
            return false;
        }
    }
}








posted @ 2017-10-21 15:00  冲向蓝天  阅读(801)  评论(0编辑  收藏  举报