C#学习与实验-2

2021/12/3 1:06:14

本文主要是介绍C#学习与实验-2,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

函数指针、委托与事件

C#中的委托与C中的函数指针非常类似:

C语言函数指针:

retrunType (Func*)(type para1, type para2, ...)

C#委托:

delegate returnType Func(type para1, type para2, ...)

函数可以看成是一系列指令的集合,计算机内存中有对应的地址储存这些指令,而函数指针指向的就是函数的首地址,也就是储存指令的内存地址的开始。

函数指针和委托都是对于函数的引用。指针的意义在于其灵活性,在不改变语句的情况下实现对不同函数的引用:比如,先通过一个函数Control()决定哪个函数要被调用,Control()返回一个函数(首地址?),该函数通过固定的函数指针引用被Control()返回的函数。

同样,委托也是一种引用。委托本质上是一个类;在函数指针中,一个指针一次只能引用一个函数,但是由于委托是一个类,这使得委托只需要每实例化一个对象就可以引用一个函数。事实上,委托在使用时确实需要实例化。委托类的特性使得它非常适合进行这样一个过程:向委托类传递一个参数,委托类定义的委托函数都能且只能接收这一个参数并进行处理。所以委托是A bunch of functions(也许还可以具有Async的特征?),它下面的同类型函数可以完成一系列任务。

那如何向委托类统一传入参数呢?利用事件。事件非常像委托的多播,它的语法如下:

event DelegateAsEventHandler EventName;

所以一个事件一定是和一个委托绑定在一起的。委托的对象需要在事件里注册:

EventName += new DelegateAsEventHandler(Func);

然后可以向事件传入参数,其参数和绑定的委托保持一致。当传入参数后,该参数会传递给委托的所有对象。

一般来说,事件绑定的委托被称为EventHandler,它由一系列具体的Handler组成,每一个Handler都是对具体方法的引用。被EventHandler这个委托引用的函数,在习惯上都具有这样的形式:

public delegate void EventHandler(object sender, EventArgs e);


这篇关于C#学习与实验-2的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程