有代表和回调相同或相似的?

问题描述 投票:48回答:5

是代表同样的事情回调?或者,他们以某种方式有关系吗?

.net callback delegates
5个回答
31
投票

A“回调”是指编码设计模式的术语,可用在具有函数指针,或它的类似物,以函数指针的任何语言(它是有点儿委托是什么)

在这个模式中,你将指针传递给一个函数到另一个函数,所以被调用函数中,它可以“回拨”你传递给它的功能。通过这种方式,你可以从外部方法,每个调用它...回调的一个例子是,当你有一个排序算法传递指针到不同的“回调”功能控制大块的方法的内部行为有要传递一个指针,指向“比较”任意对象对列表进行排序,以确定之前,其他肚里的功能。在一个调用sort方法,你可能传递通过对象名称进行比较的回调函数,另一次传递,通过物体重量,或任何比较的功能...

代表,OTOH,是一个特定的.NET类型充当一个函数指针特定的签名容器......在.NET托管代码,代表们创建和使用函数指针的唯一途径。因此,在净做回调,你实际上是通过一个委托......但代表可以在其他场景中使用,除了回调。 (具体而言,代表也可以用于实现从.NET线程池多线程)

回调也用来实现“观察者”的图案(使用活动NET中实现,其本身的特殊类型的委托的)


15
投票

(我假设你在谈论.NET在这里。如果不是,请详细说明。)

委托是实现在.NET中回调的惯用方式 - 但你不必。你可以使用一个接口,例如。 (特别是你可以再有一个回调的一个方法上的错误打电话,一个成功。当然,你可以带两名代表,而不是...)

有很多的用途超出在.NET回调的代表 - 这取决于你认为什么是一个回调,但GUI事件处理程序,线程起动器,过滤器和LINQ预测(和更多!),以对象的所有使用委托。


4
投票

一般地,一个代表是用于访问外部到拥有该方法的对象的方法的对象,而一个回调是保持委托的可变

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


4
投票

他们是手手有关。委托是在回调函数的样子的说明:

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

1
投票

服务类有一个叫做委托变量函数。调用类有想要运行名为回调优选的功能。

调用类设置委托给它的回调。

委托和回调之间的区别是视角:服务类调用被设置为调用类回调委托。

© www.soinside.com 2019 - 2024. All rights reserved.