zoukankan      html  css  js  c++  java
  • .NET类库中的内置委托Action和Func

    Action 与 Func是.NET类库中增加的内置委托,以便更加简洁方便的使用委托。
    最初使用委托时,均需要先定义委托类型,然后定义一个符合委托类型签名的函数,
    在调用前,需声明并创建委托对象,将指定函数与委托进行关联。
     
    如例1:
     
    public delegate int Math(int param1,int param2); //定义委托类型
     
    Math math;//声明委托
     
    public int Add(int param1,int param2) //定义同签名函数
    {
        return param1+param2;
    }
     
    math=new Math(Add); //创建委托对象,与指定进行关联
    math(3,4);//调用委托函数
     
    如果需要三个、四个参数的委托类型,则需要再次定义委托类型。简单的委托调用,却需要根据签名不断改变多次定义委托类型,而微软推出了对此进行简化的内置委托类型:
    Action和Func,简化了这些不必要的操作。
     
    内置委托类型,顾名思义Action和Func本身就是已经定义好的委托类型。两种委托类型的区别在于:Action委托签名不提供返回类型,而Func提供返回类型。
    Action委托具有Action<T>、Action<T1,T2>、Action<T1,T2,T3>……Action<T1,……T16>多达16个的重载,其中传入参数均采用泛型中的类型参数T,涵盖了几乎所有可能存在的无返回值的委托类型。Func则具有Func<TResult>、Func<T,Tresult>……Func<T1,T2,T3……,Tresult>17种类型重载,T1……T16为出入参数,Tresult为返回类型。
     
    例1通过简单改造:
    Func<int,int,int> math=Add;//指定委托对象并关联函数
    math(3,4);//调用委托函数
    无需定义直接进行声明关联。
    既然是委托类型,也同样可以与匿名函数、或者采用Lambda表达式结合使用:
    匿名函数:
    Func<int,int,int> math=delegate(int param1,int param2)
    {
        Return param1+param2;
    }
    Lambda:
    Func<int,int,int> math=(param1,param2)=>
    {
        Return param1+param2;
    }
    Action的使用如同上面Func的使用一样,只是缺少了返回类型,直接调用委托函数。
    Public void Add(int param1,int param2)
    {
        MessageBox.show((param1+param2).ToString());
    }
    遇到此类的委托函数调用,那我们就可以直接用Action了:
    Action<int,int> math=Add;
    math(3,4);
     
  • 相关阅读:
    PPT幻灯片放映不显示备注,只让备注显示在自己屏幕上
    Available Date 相关
    App Store常用推广方法
    iPhone应用提交流程:如何将App程序发布到App Store-转
    [转]关于适配iphone5,Invalid Launch Image的退信
    NSLog 不打印中文 - 解决
    Xcode GDB 调试
    xcode找不到真机设备 - 转
    使用静态库的一些问题 -all_load
    [深入浅出iOS库]之图形库CorePlot
  • 原文地址:https://www.cnblogs.com/cuigzh/p/13857463.html
Copyright © 2011-2022 走看看