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的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-12-06使用Microsoft.Extensions.AI在.NET中生成嵌入向量
- 2024-11-18微软研究:RAG系统的四个层次提升理解与回答能力
- 2024-11-15C#中怎么从PEM格式的证书中提取公钥?-icode9专业技术文章分享
- 2024-11-14云架构设计——如何用diagrams.net绘制专业的AWS架构图?
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#