代表与回调是一回事吗?或者他们是以某种方式相关的?
"回调"是指一种编码设计模式的术语,可以在任何具有函数指针的语言中使用,或者与函数指针类似(这类似于委托)
在此模式中,您将指向函数的指针传递给另一个函数,以便在被调用函数内,它可以"回调"您传递给它的函数.通过这种方式,您可以通过在每次调用时将指针传递给不同的"回调"函数来控制方法外部方法的一大块内部行为...回调的一个示例是当您有一个排序算法时必须传递一个指向函数的指针,该函数将"比较"要排序的列表中的任意对象对,以确定哪个对象先于另一对.在对sort方法的一次调用中,您可以传递一个回调函数,该函数按对象名称进行比较,另一次传递一个按对象权重进行比较的函数,或者其他...
委托,otoh,是一种特定的.Net类型,充当函数指针的特定于签名的容器......在.Net托管代码中,委托是创建和使用函数指针的唯一方法.所以在.Net中做一个回调,你实际上是在传递一个委托......但代理可以用在除回调之外的其他场景中.(具体来说,委托也可以用来实现.Net线程池的多线程)
回调也用于实现"观察者"模式(使用事件在.Net中实现,事件本身是一种特殊类型的委托)
(我假设你在这里谈论.NET.如果没有,请详细说明.)
代理是在.NET中实现回调的惯用方法 - 但您不必这样做.例如,您可以使用界面.(特别是你可以有一个回调,一个方法调用错误,一个成功.当然,你可以采取两个代表......)
除了.NET中的回调之外,代表有很多用途 - 它完全依赖于您认为是回调的内容,但LINQ to Objects中的GUI事件处理程序,线程启动程序,过滤器和投影(以及更多!)都使用委托.
它们是紧密相关的。委托是有关回调函数外观的描述:
delegate void MyDelegate(string Text);
然后,您可以使用一个函数,该函数可以将回调作为参数。
//This will result in a MessageBox with "Lalalala"
MyFunctionThatGetsTheCallbackFunctionRef(MyCallBackFunc);
void MyFunctionThatGetsTheCallbackFunctionRef(MyDelegate TheFunction){
TheFunction("Lalalala");
}
void MyCallBackFunc(string Text){
//my callback
MessageBox.Show(Text);
}