好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

delegate,event, lambda,Func,Action以及Predicate

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

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于delegate,event, lambda,Func,Action以及Predicate的详细内容...

  阅读:38次