[C#基础学习] Delegate 委托
C++中的指针可以指向对应类型的数据并对其进行操作,但是并没有可以指向某个函数并进行操作的方式。而C#中的delegate就相当于一个指向某个函数的指针,需要时可以直接调用定义的delegate函数来调用对应的函数。
定义方式:
域 delegate [数据类型] 函数名(传参)
基础用法
定义了一个delegate后,仅能将这个函数指向同数据类型、传参一致的函数。
例如如下内容:
public delegate int outNum(int n); int print(int n) { return n; } int sum(int n) { return n + 10; } // Start is called before the first frame update void Start() { outNum out1 = new outNum(print); outNum out2 = new outNum(sum); Debug.Log("print:"+out1(3)); Debug.Log("sum:"+out2(3)); }
输出结果为
print:3 sum:13
也可以对delegate函数进行重新定向,如下:
// Start is called before the first frame update void Start() { outNum out1 = new outNum(print); Debug.Log("print:"+out1(3)); out1 =new outNum(sum); Debug.Log("sum:"+out1(3)); }
输出结果仍然为
print:3 sum:13
Multicasting 多播
不同于指针的是,指针做加减法会改变指针指向的地址,从而读取下一位地址的数据。而delegate的加减法则是增加所指向的函数,并按顺序处理。
如下例子:
void Start() { outNum out1 = new outNum(print); outNum out2 = new outNum(sum); out1 += out2; Debug.Log("sum:"+out1(3)); }
输出结果为
sum:13
过程为:先执行out1初始指向的print函数,然后执行out2所指向的函数,因此是队列形式执行先后顺序。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能