zoukankan      html  css  js  c++  java
  • C#委拖小例子

    委托具有以下属性:

    • 委托类似于 C++ 函数指针,但它们是类型安全的。

    • 委托允许将方法作为参数进行传递。

    • 委托可用于定义回调方法。

    • 委托可以链接在一起;例如,可以对一个事件调用多个方法。

    • 方法不必与委托类型完全匹配。 有关详细信息,请参阅在委托中使用变体(C# 和 Visual Basic)

    • C# 2.0 版引入了匿名方法的概念,此类方法允许将代码块作为参数传递来代替单独定义的方法。 C# 3.0 引入了 Lambda 表达式,利用它们可以更简练地编写内联代码块。 匿名方法和 Lambda 表达式(在某些上下文中)都可编译为委托类型。 这些功能现在统称为匿名函数。 有关 lambda 表达式的更多信息,请参见 匿名函数(C# 编程指南)

     1 private void btnOpen_Click(object sender, EventArgs e)
     2         {
     3             
     4 
     5             Func<int, bool> t1 = testa;//注册方法只写方法名,不写参数。。。
     6 
     7             int[] i = { 1, 2,5 };
     8             int j=i.Count(t1);
     9 
    10             int h = i.Count(n=>n%2==0);//等效
    11 
    12             MessageBox.Show(j.ToString());
    13         }
    14 
    15         private bool testa(int a)
    16         {
    17             return a%2==0;
    18         }

    代码解读(个人理解):

      一个int型数组有一个扩展方法Count<>,参数接收的是一个public delegate TResult Func<in T, out TResult>(T arg) 类型的委托 ;

      代码第5行定义了一个Func<int, bool> t1 委托,并给t1注册了方法testa;

      代码第8行把t1做为参数传递给Count方法,Count把数组的每个元素做为t1的参数执行后,返回所有为true的总数;

      第10行是用lambda表达式方式,省去了定义委拖对象和方法,系统会将表达式做类型转换和参数类型推断;

  • 相关阅读:
    10、mysql序列使用、数据去重
    9、mysql临时表、复制表
    记一次FileOutputStream出现FileNotFoundException(stale file handle)的问题
    记一次ORACLE报ORA-02290: 违反检查约束条件错误
    TreeUtil---生成树状结构数据
    Redis
    Redis事务
    Redis工具类
    Nginx
    EasyExcel动态导出数据
  • 原文地址:https://www.cnblogs.com/longling2344/p/5769664.html
Copyright © 2011-2022 走看看