码迷,mamicode.com
首页 > Windows程序 > 详细

C#委拖小例子

时间:2016-08-14 11:41:58      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:

委托具有以下属性:

  • 委托类似于 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表达式方式,省去了定义委拖对象和方法,系统会将表达式做类型转换和参数类型推断;

C#委拖小例子

标签:

原文地址:http://www.cnblogs.com/longling2344/p/5769664.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!