A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 千年虫 黑马帝   /  2012-9-14 19:33  /  1645 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

{:soso_e115:}

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

3 个回复

倒序浏览
本帖最后由 iamheima 于 2012-9-15 00:20 编辑

你所说的方法回调在C++中一般称为回调函数,是通过函数指针来实现的,在C#中则是通过委托来实现。
要理解回调首先要理解函数调用,模块化的程序设计中函数调用时常有的,如下:
  1. function1()
  2. {
  3.     ....
  4. }
  5. function2()
  6. {
  7.    ....
  8.    function1();
  9. }
复制代码
其中function1是被调函数,而function2是主调函数。
那么,什么样叫回调呢?被调用者回头调用调用者的函数这就叫做回调。
试想一下你现在要写一个对数组进行排序的函数,这个函数可以对任意的数据类型进行排序,不管是Int也好,double也罢,甚至是对象都行,那么你怎么样去写这个函数?不要想着将每一种数据类型都考虑到排序函数中!
其实只需要调用者再提供一个比较特定数据类型的函数作为排序函数的参数传递进来,我们就可以对任何数据类型的数组进行排序了,至于不同的语言将函数作为参数进行传递的方法都有所不同,重点在于思想。

评分

参与人数 1技术分 +2 收起 理由
郑文 + 2

查看全部评分

回复 使用道具 举报
学习中,个人不太喜欢纠结于术语,那却是使人很纠结的东西,我也曾因为那种种奇特的术语所困扰,不要碰到一个名词就问这个是什么,按照自己的学习计划去学习,学到了,自然就理解了;
个人理解的回调,就是“将方法作为参数”,这个在.net中,要通过委托去实现:
  1. int Max(int x,int y)

  2. {

  3. return x>y?x:y;

  4. }

  5. //建立一个委托类型,该委托指向的方法签名
  6. delegate void MyDelegate(int a,int b);
  7. //利用委托类的构造方法,回调以定义好的Max方法
  8. MyDelegate md=new MyDelegate(Max);

复制代码
http://www.cnblogs.com/warensoft/archive/2010/03/19/1689806.html
这篇博文写得很好,里边有提到方法的回调。

评分

参与人数 1技术分 +2 收起 理由
郑文 + 2

查看全部评分

回复 使用道具 举报
C# 里面这个东西一般指某个委托.其实也可以是接口.

delegate void WorkDone();
void Working(WorkDone callBack){
//Working code.
//当工作完成的时候执行这个委托.
callBack();
}
void WorkDoneHandler(){
   //Do something other.
}
void Do(){
  WorkDone callBack = new WorkDone(WorkDoneHandler);
  Working(callBack);
}

也就是相当把某个方法(WorkDoneHandler())当作参数传递给另外一个方法(Working(WorkDone callBack)).
这样做的好处在于,可以动态的指定执行哪个方法.
比如在Do()方法中,我们指定的callback 是WorkDoneHandler 当然也可以是其它匹配的方法. 而Working()方法 更本不需要知道自己最后执行的是哪个Handler.赞同32| 评论

评分

参与人数 1技术分 +2 收起 理由
郑文 + 2

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马