以c/c++角度来理解c#中的委托(Delegate)

来源:赵克立博客 分类: C# 标签:C#发布时间:2022-12-06 22:48:48最后更新:2022-12-06 23:20:55浏览:94
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。o_0。
更新时间:
2022-12-06 23:20:55
温馨提示:
学无止境,技术类文章有它的时效性,请留意文章更新时间,如发现内容有误请留言指出,防止别人"踩坑",我会及时更新文章

前言

经常在各个编辑语言之间穿插难免会导致一些概念混淆,以下记录下对c#中委托的理解,方便 c/c++ c# 语法上的思维转换,根据每个人接触语言,理解角度的不同,可能有不正确的地方。

c/c++函数指针

c/c++中可以声明函数指针,函数指针声明了这个函数的返回值和入参类型, 然后这个函数指针就可以在其它函数中作为入参来使用。

使用时先按函数指针类型声明一个函数,然后把函数名传给入参的地方

c#委托

c#委托跟c/c++函数指针是类似的,同样需要先声明一个委托,然后这个委托就可以在其它函数中作为入参来使用。

使用时先声明一个跟委托结构一至的函数,然后需要new 委托(定义的函数),然后把new的这个委托对象传给需要的函数作为入参

可见,唯一不同的地方是,c#中使用委托时需要把函数名入参给定义的委托,new成一个对象后才能使用.。


此外C#的委托还有更方便的用法,委托的多播(Multicasting of a Delegate)可以把多个委托函数组合到一块,执行一次自动调用多个委托,委托:即一个函数处理句柄

c#事件

c#委托和事件是在一块用的,c#事件就是对委托多播的一种封装。事件就是发生了什么事然后需要谁、怎么去处理这个事,比如,鼠标点击、移动、键盘按下、下载完成(用户自定义事件)等。你可以任意的定义自己的事件。事件发生了当然需要做一些处理,需要把这个事件关联上一个委托(处理函数),关联之后就可以给这个事件按委托的结构来定义一个或多个处理程序,并绑定上去,事件发生后就可以依次调用事件上的委托函数列表

下面定义了一个事件

// 定义委托
public delegate void delegate_name(string status);

// 基于上面的委托定义事件
public event delegate_name event_name;



微信号:kelicom QQ群:215861553 紧急求助须知
Win32/PHP/JS/Android/Python