委托与事件(读书笔记)
2010-12-05 15:59
253 查看
委托是一种特殊的对象类型,其特殊之处在于,我们以前定义的所有对象都包含数据,而委托包含的只是方法的地址。
C#高级编程(第6版)这么定义委托:如果要向以函数传递方法,必须把方法的细节封装在一种新类型的对象中。声明委托时,C#编译器会创建一个sealed(密封)类(故委托不能被继承),并以委托标识符命名,。该类定义了一个构造函数,它接受方法(可以是静态方法或实例方法)名作为其一个参数。
其实叩响C#之门里讲的委托更好理解。委托用关键字delegate声明,它实际上是定义了一种“函数类型”,明确规定了函数的参数类型和返回值类型。委托实例实际上是被委托的函数的别名。
之所以说委托是类型安全的,是因为C#编译器会严格检查函数类型和委托类型是否匹配,只有完全匹配才能进行匹配。
匿名函数:匿名函数可以直接把“代码块”定义成委托,而不需要事先定义函数。优点:它不光可以使用代码块内定义的变量,而且可以使用代码块外定义的变量。
事件:事件实际上是委托的一个实例。它和变量、属性等一样,都是类的数据成员,只是声明事件时必须用event关键字。当我们用vs的控件事件时,实际上vs后台已经为我们定义好了该事件,我们直接将事件处理程序注册在该事件上就可以了。
我们为什么要用委托来处理事件呢?
一般从事件处理程序来看,都有两个参数,一个发送器,一个接收器。从接收器的角度来看,在系统事件中,例如鼠标单击或键盘按键,发送器就是.net运行库,而事件的发送器并不知道并不知道接收器是谁。现在,在事件接收器的某个地方有一个方法,它负责处理事件,在每次发送已注册的事件时,就执行这个事件处理程序,此时就要使用委托了,由于发送器对接收器一无所知,所以无法设置两者之间的引用类型,而是使用委托作为中介。
如果我们自己要创建一个事件驱动的程序需要下面的步骤:
1、声明关于事件的委托;
2、声明事件;
3、编写触发事件处理程序;
4、创建事件处理程序;
5、注册事件处理程序;
6、在适当的条件下触发事件。
C#高级编程(第6版)这么定义委托:如果要向以函数传递方法,必须把方法的细节封装在一种新类型的对象中。声明委托时,C#编译器会创建一个sealed(密封)类(故委托不能被继承),并以委托标识符命名,。该类定义了一个构造函数,它接受方法(可以是静态方法或实例方法)名作为其一个参数。
其实叩响C#之门里讲的委托更好理解。委托用关键字delegate声明,它实际上是定义了一种“函数类型”,明确规定了函数的参数类型和返回值类型。委托实例实际上是被委托的函数的别名。
之所以说委托是类型安全的,是因为C#编译器会严格检查函数类型和委托类型是否匹配,只有完全匹配才能进行匹配。
匿名函数:匿名函数可以直接把“代码块”定义成委托,而不需要事先定义函数。优点:它不光可以使用代码块内定义的变量,而且可以使用代码块外定义的变量。
事件:事件实际上是委托的一个实例。它和变量、属性等一样,都是类的数据成员,只是声明事件时必须用event关键字。当我们用vs的控件事件时,实际上vs后台已经为我们定义好了该事件,我们直接将事件处理程序注册在该事件上就可以了。
我们为什么要用委托来处理事件呢?
一般从事件处理程序来看,都有两个参数,一个发送器,一个接收器。从接收器的角度来看,在系统事件中,例如鼠标单击或键盘按键,发送器就是.net运行库,而事件的发送器并不知道并不知道接收器是谁。现在,在事件接收器的某个地方有一个方法,它负责处理事件,在每次发送已注册的事件时,就执行这个事件处理程序,此时就要使用委托了,由于发送器对接收器一无所知,所以无法设置两者之间的引用类型,而是使用委托作为中介。
如果我们自己要创建一个事件驱动的程序需要下面的步骤:
1、声明关于事件的委托;
2、声明事件;
3、编写触发事件处理程序;
4、创建事件处理程序;
5、注册事件处理程序;
6、在适当的条件下触发事件。
相关文章推荐
- 读书笔记之C#委托与事件(上)
- [读书笔记]C#学习笔记二: 委托和事件的用法及不同.
- 读书笔记之委托与事件
- 读书笔记之委托与事件(下)
- [读书笔记]C#学习笔记二: 委托和事件的用法及不同
- 读书笔记_C#技术内幕_第十一章(委托和事件)(委托部分)
- 读书笔记_C#技术内幕_第十一章(委托和事件)(事件部分)
- [读书笔记]C#学习笔记二: 委托和事件的用法及不同.
- 读书笔记:理解委托与事件
- 委托与事件 读书笔记
- C# 中的委托和事件
- C#中的委托(Delegate)和事件(Event)
- JavaScript事件委托的技术原理
- JS中的事件委托,事件代理
- c#关于委托和事件
- DOM的默认事件、事件模型、事件委托、阻止默认事件、冒泡事件的方式等。
- 对C#委托及事件委托的理解
- C#委托 委托示例 事件驱动
- net WinForm 控件的事件委托剖析
- C# winform窗体间传值(使用委托或事件)