日期:2014-05-19  浏览次数:20779 次

关于回调函数。
一直对回调函数不太理解。

是怎么执行的?

------解决方案--------------------
C#中的回调机制使用委托实现

例如有一个方法,它的作用是从来源A获取信息然后发布到目标B,但是它不会处理信息。它的工作是这个样子的:

while (还没下班) {
// 获取信息
// 获取信息
// 获取信息
// 获取信息 。。。

// 处理信息——我不知该怎么处理

// 发布信息
// 发布信息
// 发布信息
// 发布信息 。。。
}

它就可以将处理信息那里抽象成一个委托,这个委托的输入是获取回来的信息,输出是经过处理可以发布的信息:
public delegate string/*输出*/ ProcessInfoDelegate(string rawMessage)/*输入*/

这样,方法就可以写成

public void TransferInfo(X source, ProcessInfoDelegate how, Y destination)
{
string msg;
// ...
// 获取信息中
// ...

msg = how(msg); // 委托别人做信息处理工作

// ...
// 发布信息中
// ...
}

那么,如果有一个类需要用这个方便的方法,它就先定义它期待的信息处理方法,例如
class User
{
private string MyProcessor(string input)
{
return input.Substring(2); // 不要最前面两个字符
}

然后调用方法:
public void Do()
{
....
ClassName.TransferInfo(src,
new ProcessInfoDelegate(MyProcessor), // 包装委托变量
dest);
}
}

------解决方案--------------------
学习,谢谢~
------解决方案--------------------
是不是可以这么理解.
回调函数是一段函数,但不是用来给我们调用的,而是给系统调用的.
------解决方案--------------------
应该这么说,回调函数就是提供给被调用者调用的函数。C/C++中通过函数指针实现的,C#中通过委托实现的。