“回调函数”这个术语是从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类型的参数?不明白