一,开始学习
1,委托
- 委托的含义与现实生活中的含义类似,但如何去办及怎样来办就要靠被委托方自己来想办法,在具体技术上,就是定义了一个方法函数,但没有实现方法体的代码,然后依靠被委托的方法来实现。
委托的概念
- 它是一种特殊方法,它只是定义了方法名,并没有具体的方法体代码。
- 一旦为委托分配了方法,委托将与该方法具有完全相同的行为,委托方法的调用可以像其他任何方法一样,具有参数和返回值。
特点:
- 类似于C函数指针,但它们是类型安全;
- 允许将方法作为参数进行传递;
- 可用于定义回调方法;
- 可以链接在一起;
- 方法不必与委托签名完全匹配。
用delegate来声明委托方法,该委托不返回任何数据,传递的参数是字符串类型。
声明委托:
- 用delegate来声明委托,单一方法和多种方法的委托的声明是一样的。
- 使用new运算符来创建一个委托的方法。
- 使用“+”和“-”运算符实现多重委托。因为多个方法的委托实际上是数组结构,所以可以进行添加和删除的操作,当然,这种操作已经被 C#重载了,专门用来操作委托。
- 删除一个委托,用Delegate.Remove方法来删除,这个方法有两个参数,一个是现有的委托(要包含要删除的委托),一个是要删除的委托。
- 可以使用“-”删除委托。
2,调用单一委托:
- 当实现委托的时候,封装的多个方法将逐一按照顺序调用,如果有参数,则提供参数。
定义并使用单一委托,具体功能是传递一个字符串并返回一个字符串。
后面指定了类DelegateDemo的静态方法作为委托方法,而不是通过创建的类的实例。
多重委托:
- 多重委托可以把多个委托进行组合或者删除。
这里创建两个单一委托,然后创建多重委托。
委托作为参数传递:
- 委托也是对象,可以作为参数传递给方法。这种传递是通过引用来传递的(类似C语言的指针)。
委托对象实现平方运算和立方运算,该运算的具体实现通过SquareMe和CubeMe方法来实现。
ShowResult方法有一个委托参数,使用new DelegateAbc来创建一个委托实例,并作为参数传递,传递的值是被委托的方法的返回值。
3,事件
- 任何事物都会有一些事件发生,程序也是一样的,可能有外部其他程序引发的事件,事件是类在发生其关注的事情时用来提供通知的一种方式。
特点:
- 事件是类用来通知对象需要执行某种操作的方式;
- 尽管事件在其他时候(如信号状态更改)也很有用,事件还是在图形用户界面中使用得比较广泛;
- 事件通常使用委托事件处理程序程序进行声明;
- 事件可以调用匿名方法来代替委托方法。
- 事件经常与委托一起使用,通过委托方法,把事件处理委托给相应的方法函数。
事件的实现:
- 例如,把0到100的整数中能够被7整除的数输出,把遇到被7整除的数看做一个事件,并委托一个方法来显示结果。
- event关键字,用来声明一个事件。
在代码前面定义了委托方法,委托中定义了发送到事件处理程序的参数,这样,任何类都有处理事件的方法,第一个参数是一个object类型的参数,用来接收方法函数;第二个参数是一个系统事件对象。系统事件EventArgs是与事件相关的基类,使用它来发送事件消息到处理程序。
二,小结
1,委托是一种特殊方法,它只是定义了方法名,并没有具体的方法体代码。
2,任何事物都会有一些事件发生,程序也是一样的,可能有外部其他程序引发的事件,事件是类在发生其关注的事情时用来提供通知的一种方式。