壮志凌云,脚踏实地。
改变,坚持。

委托是一种特殊的对象类型,其特殊之处在于,我们以前定义的所有对象都包含数据,而委托包含的只是方法的地址。

  C#高级编程(第6版)这么定义委托:如果要向以函数传递方法,必须把方法的细节封装在一种新类型的对象中。声明委托时,C#编译器会创建一个sealed(密封)类(故委托不能被继承),并以委托标识符命名,。该类定义了一个构造函数,它接受方法(可以是静态方法或实例方法)名作为其一个参数。

  其实叩响C#之门里讲的委托更好理解。委托用关键字delegate声明,它实际上是定义了一种“函数类型”,明确规定了函数的参数类型和返回值类型。委托实例实际上是被委托的函数的别名。

之所以说委托是类型安全的,是因为C#编译器会严格检查函数类型和委托类型是否匹配,只有完全匹配才能进行匹配。

匿名函数:匿名函数可以直接把“代码块”定义成委托,而不需要事先定义函数。优点:它不光可以使用代码块内定义的变量,而且可以使用代码块外定义的变量。

  事件:事件实际上是委托的一个实例。它和变量、属性等一样,都是类的数据成员,只是声明事件时必须用event关键字。当我们用vs的控件事件时,实际上vs后台已经为我们定义好了该事件,我们直接将事件处理程序注册在该事件上就可以了。

我们为什么要用委托来处理事件呢?

  一般从事件处理程序来看,都有两个参数,一个发送器,一个接收器。从接收器的角度来看,在系统事件中,例如鼠标单击或键盘按键,发送器就是.net运行库,而事件的发送器并不知道并不知道接收器是谁。现在,在事件接收器的某个地方有一个方法,它负责处理事件,在每次发送已注册的事件时,就执行这个事件处理程序,此时就要使用委托了,由于发送器对接收器一无所知,所以无法设置两者之间的引用类型,而是使用委托作为中介。

如果我们自己要创建一个事件驱动的程序需要下面的步骤:

1、声明关于事件的委托;

2、声明事件;

3、编写触发事件处理程序;

4、创建事件处理程序;

5、注册事件处理程序;

6、在适当的条件下触发事件。

posted on 2010-12-05 15:59  woxf  阅读(282)  评论(0编辑  收藏  举报