委托和事件

这个主题是关于委托的。

一、委托是什么?

委托是用delegate定义的函数指针(其实并不只是一个指针,而是包含一组相关数据)。委托类型定义委托变量,委托变量可以用“函数名”、匿名函数和lambda赋值。而委托变量可以调用该函数。

二、事件是什么?

事件是对委托的封装,类似属性对字段的封装。

事件施加的限制是:一、规定委托的类型,void (Object, EventArgs 或其子类 );二、对外只提供增加关联函数+= 操作和减少关联函数-=操作,而没有提供获取该委托变量的接口,防止任意修改。

只需要在定义委托变量前面加event 关键字就定义了事件,标准事件的委托是EventHandler<T>。编译器会自动生成相关的包装代码。但是也可以自定义包装代码:

event 委托类型 事件名{ add{} remove{} }

三、运用委托

第一步是定义委托类型,第二步定义委托变量,第三步执行委托。

1. int delegate myFunc(int, int);

2. myFunc f1, f2;           

f1 = (x,y)=>x+y;

f2 = delegate(int x, int y){return x * y;};

3. f1(1,2); //==3

   f2(1,2);//==2

委托的运用场合:当你需要传递参数给某个过程时,可以是选择特定的算法,也可以是通知对象去处理。

事件就是通知对象处理消息这个用途。消息发布者定义事件(委托),而订阅者绑定事件处理函数,当发布者决定引发事件时,就通过调用绑定了的事件处理函数执行相关操作。

发布者不需要了解事件怎么处理,由谁处理,只需要决定引发事件的时机;而订阅者不需要了解事件是怎么发生的,只需要简单关联并提供处理方案。

posted @ 2012-12-02 20:55  诺贝尔  阅读(419)  评论(0编辑  收藏  举报