Действительно ли делегаты и обратные вызовы являются тем же или подобный?

48
задан iliketocode 2 October 2015 в 15:47
поделиться

4 ответа

"Обратный вызов" является термином, который обращается к шаблону разработки кодирования, доступному на любом языке, который имеет указатели функции или аналог указателям функции (который является отчасти, что делегат)

В этом шаблоне, Вы передаете указатель на функцию к другой функции, так, чтобы в вызванной функции, это могло "отозвать" функцию, которую Вы передали ему. Таким образом можно управлять большим блоком внутреннего поведения метода снаружи метода передающими указателями на различную функцию "обратного вызова" каждый раз, когда Вы называете его... Пример обратного вызова - когда у Вас есть алгоритм сортировки, который должен быть передан указатель на функцию, которая "сравнит" любую произвольную пару объектов в списке, который будет отсортирован, определит, который идет перед другим. На одном вызове к методу сортировки Вы могли бы передать функцию обратного вызова, которая выдерживает сравнение именем объекта, и другое время передает функцию, которая выдерживает сравнение объектным весом, или безотносительно...

Делегат А, otoh, является определенным типом.Net, который действует как определенный для подписи контейнер для указателя функции... В.Net управляемом коде делегаты являются единственным способом создать и использовать указатель функции. Таким образом в.Net, чтобы сделать обратный вызов, Вы на самом деле передаете делегата... Но делегаты могут использоваться в других сценариях помимо обратных вызовов. (а именно, делегаты могут также использоваться для реализации многопоточности от.Net пула потоков)

, Обратные вызовы также используются для реализации шаблона "наблюдателя" (реализованный в.Net использование Событий, которые являются самостоятельно специальным типом делегата)

34
ответ дан Ray Vega 26 November 2019 в 19:01
поделиться

(Я предполагаю, что Вы говорите о.NET здесь. В противном случае уточните.)

Делегаты являются идиоматическим способом реализовать обратные вызовы в.NET - но Вы не имеете к. Вы могли использовать интерфейс, например. (В особенности у Вас мог тогда быть один обратный вызов с одним методом для обращения к ошибке, и один на успехе. Конечно, Вы могли взять двух делегатов вместо этого...)

существует много использования для делегатов вне обратных вызовов в.NET - она зависит от точно, что Вы считаете, чтобы быть обратным вызовом, но обработчиками событий GUI, начинающими потока, фильтрами и проекциями (и больше!) в LINQ к Объектам все делегаты использования.

15
ответ дан Jon Skeet 26 November 2019 в 19:01
поделиться

в общем делегат является объектом, используемым для доступа к методу, внешнему к объекту, владеющему методом, в то время как обратный вызов является переменной, которая содержит делегата

в C#, термины используются попеременно

4
ответ дан Steven A. Lowe 26 November 2019 в 19:01
поделиться

Они рука об руку связаны. Делегат является описанием о том, как функция обратного вызова похожа:

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);
}
5
ответ дан nawfal 26 November 2019 в 19:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: