专业编程基础技术教程

网站首页 > 基础教程 正文

从零开始自学C#基础的第三十四天——委托和事件

ccvgpt 2024-08-28 13:35:53 基础教程 83 ℃

一,开始学习

1,委托

从零开始自学C#基础的第三十四天——委托和事件

  • 委托的含义与现实生活中的含义类似,但如何去办及怎样来办就要靠被委托方自己来想办法,在具体技术上,就是定义了一个方法函数,但没有实现方法体的代码,然后依靠被委托的方法来实现。

委托的概念

  • 它是一种特殊方法,它只是定义了方法名,并没有具体的方法体代码。
  • 一旦为委托分配了方法,委托将与该方法具有完全相同的行为,委托方法的调用可以像其他任何方法一样,具有参数和返回值。

特点:

  • 类似于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,任何事物都会有一些事件发生,程序也是一样的,可能有外部其他程序引发的事件,事件是类在发生其关注的事情时用来提供通知的一种方式。

Tags:

最近发表
标签列表