代表和callback是相同的还是相似的?

代表和callback一样吗? 或者他们有某种关系?

“callback”是一个术语,指的是一个编码devise模式,可用任何语言有function指针,或模拟function指针(这是什么代表是)

在这个模式中,你将一个指向函数的指针传递给另一个函数,以便在被调用的函数中,它可以“callback”你传递给它的函数。 通过这种方式,您可以通过在每次调用指针时将指针传递给不同的“callback”函数来控制方法外部的一大块方法的内部行为。callback的一个示例是当您有一个sortingalgorithm必须传递一个指向函数的指针,该函数将“比较”要sorting的列表中的任意一对对象,以确定哪一个对象在另一个之前。 在一次调用sort方法的时候,你可能会传递一个callback函数来比较对象的名字,而另一次传递一个函数来比较对象的权重,或者其他的…

代表otoh是一个特定的.Nettypes,它充当函数指针的特定于签名的容器。在.Net托pipe代码中,委托是创build和使用函数指针的唯一方法。 所以在.net做callback,你实际上是传递一个委托…但委托可以用于除callback以外的其他场合。 (具体来说,代表也可以用来实现.Net线程池中的multithreading)

callback也用于实现“观察者”模式(在.Net中使用Events实现,这本身就是一种特殊types的委托)

(我假设你在这里讨论.NET,如果没有,请详细说明。)

代表是在.NET中实现callback的惯用方式 – 但是你不必这样做。 例如,您可以使用一个接口。 (特别是你可以有一个callback方法来调用错误,一个成功,当然,你可以取两个代表…)

除了.NET中的callback函数以外,委托还有很多用途 – 它完全依赖于你认为是callback的东西,而LINQ to Objects中的GUI事件处理程序,线程启动器,filter和投影(还有更多!)都使用委托。

一般来说,一个委托是一个对象,用于访问拥有该方法的对象的外部方法,而callback是一个variables,它拥有一个委托

在C#中,这些术语可以互换使用

他们手拉手相关。 一个委托是关于如何callback函数的描述:

delegate void MyDelegate(string Text); 

那么你可以有一个函数,可以把callback作为一个参数。

 //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); }