zoukankan      html  css  js  c++  java
  • delegate,event, lambda,Func,Action以及Predicate

    1. delegate 委托
    可以理解为cxx 语言中的函数指针,标示了方法调用的回调函数的规范。强类型,便于编译时检查是它的最大优点,从此可以和void * 说再见了。

    2. event 事件
    用以delegate委托声明事件,标示响应该事件的回调函数必须符合其声明委托的定义

    3. lambda 表达式
    在.net世界中表现为匿名委托,之前又要提到匿名方法(函数)

    01 public class Test{
    02 public void delegate Close(); //声明一个无参无返回值的委托
    03 public event Close CloseEvent; //声明一个Close对应事件
    04 }
    05 static void Main() //模拟一个控制台
    06 {
    07    Test test = new Test();
    08    test.CloseEvent += TestClose; //使用委托回调函数
    09    test.CloseEvent += delegate{ Console.Write("test");} //使用匿名方法
    10    test.CloseEvent += ()=> Console.Write("test"); //使用匿名委托 ,lambda表达式
    11 }
    12 static void TestClose()
    13 {
    14    Console.Write("test");
    15 }


    4. Func 有返回值的泛型委托
    有多种方法重载,比如
    Func<int> 表示无参,返回值为int的委托
    Func<object,string,int> 表示传入参数为object, string 返回值为int的委托

    Func<int> = delegate int Delegate();
    Func<object,string,int> = delegate int Delegate(object, string);

    5. Action 无返回值的泛型委托
    Action 表示无参,无返回值的委托
    Action<int,string> 表示有传入参数int,string无返回值的委托
    Action act = delegate void Delegate();
    Action<int,string> act = delegate void (int, string)

    6. Predicate 返回bool型的谓语泛型委托
    Predicate<int> 表示传入参数为int 返回bool的委托
    Predicate<int> pre = delegate bool (int);
    譬如这样使用  Predicate<int[]> pre = i => i.Length == 10;
    用来判断传入的整形数组个数是否为10

    http://www.cnblogs.com/tianzhiliang/archive/2011/01/06/1927803.html

  • 相关阅读:
    gitlab10+版本删除项目工程
    Ubuntu16.04上通过anaconda3离线安装Tensorflow2.0详细教程
    android中根据smartRefeshLayout自定义上下拉刷新效果
    android高德地图根据经纬度添加标注(Marker)
    android设置状态栏颜色
    android复制内容到剪贴板
    android拨打电话的两种方式
    java集合转String数组
    解决jenkins部署TomcatManagerException问题
    SpringCloud 微服务消费者之间相互调用的方式
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2088634.html
Copyright © 2011-2022 走看看