C#回调函数这方面我一直不是很懂,是先定义一个回调函数,但是具体实现...
发布网友
发布时间:2022-05-06 09:51
我来回答
共3个回答
热心网友
时间:2022-04-24 16:26
“回调函数”这个术语是从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什么事儿了。不知道这样说,你会不会理解得更清楚一点。
热心网友
时间:2022-04-24 17:44
CALLBACK 是委托类型,定义的时候会delegate这个关键字,其作用你可以理解为将与之有相同参数列表和返回值的函数作为引用,将其作为参数传入其他方法来实现回调功能。
CALLBACK myCallBack = new CALLBACK(Report)这里创建了这个委托对象,将其指向了Report方法,而不是将一个bool变量传给CALLBACK。
这里的主要作用就是当你在访问EnumWindows这个方法时,会在调用EnumWindows过程中(一般都是结尾处,当然也可以在EnumWindows代码块的任意地方)来调用Report方法,而不是等EnumWindows执行完毕再自己手动调用Report
热心网友
时间:2022-04-24 19:19
回调是各种语言通用的概念,就是A调用B,并传给B一个回调函数f,B做完了改做的事,就调用f(目的是通知A已完成,返回值等)
上面的delegate就是回调函数,EnumWindows就是调用了操作系统的api(C/C++),在底层代码里会调用这个delegate