C#回调函数这方面我一直不是很懂,是先定义一个回调函数,但是具体实现的时候是在其他地方实现吗?

那这样的话是不是有点类似抽象函数,或者接口实现。这里怎么理解?回调函数怎么看起来像是个类?CALLBACK myCallBack = new CALLBACK(Report); 实例化了一个CALLBACK的对象 为什么里面带了一个参数,而这个参数是个函数?Report的返回值是bool,那么他就是作为一个bool类型的值传到CALLBACK中了吗?mycallback这个参数应该是CALLBACK类型的,它的值具体是多少?

“回调函数”这个术语是从Javascript这类函数式编程语言里产生的,C#里并没有回调函数这一概念,所以你的代码里无论是谁作的注释,可见他并不太喜欢C#。
CALLBACK是一个delegate,中文教材一般翻译为“委托”,其实就像C语言里指向函数的指针(这是个比喻,方便你理解,但我建议你不要这样固化概念,因为委托还有很多与指针完全不同的地方),CALLBACK的定义只体现了这样一件事:它可以代表一个方法,这个方法如同声明它时候指出的那样,接受两个int参数,并返回一个bool,仅此而已。换句话说,CALLBACK代表了一种明确的方法签名,即任何以两个int为形参,并返回bool的方法,它都可以“代表”(即委托给它)。但至于这样的方法到底是谁,具体怎么用这两个参数,根据什么返回bool,那是被委托的方法自己要实现的事情(正如你的Report方法所做的事情)。
CALLBACK myCallBack = new CALLBACK(Report);
就是使用委托的关键,它的意思是:myCallBack作为Report的委托(注意Report并没有执行,只是说谁调用myCallBack.Invoke()方法,谁就实际上执行了Report,你可以想像,EnumWindows既然接受了myCallBack,肯定会由它调用),被传送给了EnumWindows,EnumWindows并不知道自己执行的到底是哪个具体的方法,它只需要知道myCallBack需要两个int作为参数,它也会提供这两个参数,然后等着myCallBack所代表的方法执行完毕,再还给它一个bool,然后EnumWindows拿着这个bool去做别的事,就再没myCallBack什么事儿了。不知道这样说,你会不会理解得更清楚一点。追问

谢谢你哦 注释是我自己写的 也不知道对不对呢 我可能理解有误

追答

回调函数一般常见于单线程语言为了实现形似多线程的操作采用的办法,在所谓“子线程”调用结束后,回调函数会立即执行,就好像回到了“主线程”一样,这和delegate的概念完全没关系,delegate更像是指针,它就是指向一个方法而已。

追问

为什么EnumWindows会提供两个int类型的参数?不明白

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-04-23
CALLBACK 是委托类型,定义的时候会delegate这个关键字,其作用你可以理解为将与之有相同参数列表和返回值的函数作为引用,将其作为参数传入其他方法来实现回调功能。
CALLBACK myCallBack = new CALLBACK(Report)这里创建了这个委托对象,将其指向了Report方法,而不是将一个bool变量传给CALLBACK。
这里的主要作用就是当你在访问EnumWindows这个方法时,会在调用EnumWindows过程中(一般都是结尾处,当然也可以在EnumWindows代码块的任意地方)来调用Report方法,而不是等EnumWindows执行完毕再自己手动调用Report
第2个回答  2020-05-07
回调是各种语言通用的概念,就是A调用B,并传给B一个回调函数f,B做完了改做的事,就调用f(目的是通知A已完成,返回值等)
上面的delegate就是回调函数,EnumWindows就是调用了操作系统的api(C/C++),在底层代码里会调用这个delegate
相似回答