zoukankan      html  css  js  c++  java
  • Func<>与Action

    Action 与 Func是.NET类库中增加的内置委托,以便更加简洁方便的使用委托
    最初使用委托时,均需要先定义委托类型,然后定义一个符合委托类型签名的函数,
    在调用前,需声明并创建委托对象,将指定函数与委托进行关联。
    如例1:

    public delegate int Math(int param1, int param2);
    // 1. 定义委托类型
    Public int Add(int param1, int param2) //定义同签名函数
        {
            Return param1 + param2;
        }
    Math math; //声明委托
    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为返回类型

    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);

    原文链家:http://www.cnblogs.com/ultimateWorld/p/5608122.html

  • 相关阅读:
    硬件的那些事
    seaJS学习资料参考
    nodejs前端自动化构建
    移动端开发的坑【持续更新...】
    【retina】手机上 1PX 边框
    【面试季之三】IE6兼容问题
    【面试季二】前端性能优化
    【面试季一】若干前端面试题
    【面试的坑】行内元素是否可以设置宽高
    Bootstrap和IE何时能相亲相爱啊~
  • 原文地址:https://www.cnblogs.com/ZkbFighting/p/7722595.html
Copyright © 2011-2022 走看看