委托、Lambda表达式和事件

来源:互联网 发布:淘宝女装平铺拍摄技巧 编辑:程序博客网 时间:2024/05/20 11:47

关于委托、Lambda表达式和事件的一些浅显的理解

一、委托

1.什么是委托

委托就是持有一个或多个方法的对象,并且该对象可以执行,可以传递。

delegate void ActCute();//定义委托对象ActCute actCute;

2.声明委托类型

委托可以持有方法,它是一种引用类型,下面是委托的声明。

ActCute 就是一种委托类型,可以利用它来定义一个对象,这个对象叫做actCute;该对象的类型就是ActCute,它是一种委托类型,这种类型可以持有一种返回void并且没有任何参数的方法。

3.给委托对象赋值

calss Dog{         public void WagTail(){...}}actCute = dog.WagTail;

这样委托对象actCute就持有了dog.WagTail的方法;这是一个具体的方法,这个方法也可以是静态的方法,也可以是某个对象做持有的方法。

4.使用委托类型

使用委托类型就像调用函数一样。

actCute();

一个委托可以持有多个方法,调用一次委托相当于执行了委托所持有的所有方法。

二、Lambda表达式

1. 首先先了解一下什么是匿名方法(C#2.0定义)

delegate void ActCute(); //定义委托类型ActCute del; //定义委托对象del = delegate(){...}; //给委托对象赋值

步骤:首先写关键字,然后是方法的参数列表,接着是方法体,方法体里面写方法的具体内容。

如果某个函数只需要使用一次,下次不需要再次调用时可以考虑使用匿名函数。

2. 什么是Lambda表达式(C#3.0定义)

del=delgate(){...};

del=()=>{...};

=>取代了delegate命名方法的形式。

三、事件

1. 发布者和订阅者

通知某事件发生的就是发布者。(例:我发布了微博)

对某件事情关注的就是订阅者。(例:我关注了微博)

2. 事件的触发和注册

事件发生时会通知所有关注该事件的订阅者。想在事件发生时被通知,必须注册以表示关注。

3. 用程序语言解释

事件发生时通知订阅者,调用订阅者的注册函数。注册,就是告诉发布者调用哪一个注册函数。

4. 事件声明

delegate void Handler();public event Handler NewDog;

Handler是委托类型,NewDog是事件名。

NewDog是一个成员,并且会被隐式自动初始化为null。

5. 事件订阅

对事件的操作只有下面这两种方法。

NewDog += 方法

NewDog -= 方法

6. 事件触发

if(NewDog!=null){      NewDog();}

事件触发的时候需要检测一下是否有人关注它订阅它。若不为空就说明有订阅者,事件的发布会通知所有的订阅者,调用这些订阅者的方法是使用在注册的时候告诉发布者的那些回调函数。

其实,事件可以理解为一种封装的受限制的委托。

 










原创粉丝点击