parameter net example event ejemplo delegate and .net callback delegates

.net - net - ¿Los delegados y las devoluciones de llamada son iguales o similares?



delegate.net example (4)

(Supongo que estás hablando de .NET aquí. Si no, por favor elabora).

Los delegados son la forma idiomática de implementar devoluciones de llamada en .NET, pero no es necesario. Podría usar una interfaz, por ejemplo. (En particular, podría tener una devolución de llamada con un método para invocar el error y otro con éxito. Por supuesto, podría tomar dos delegados en su lugar ...)

Hay muchos usos para los delegados más allá de las devoluciones de llamada en .NET: depende exactamente de lo que considere una devolución de llamada, pero los manejadores de eventos de la GUI, los iniciadores de subprocesos, los filtros y las proyecciones (y más) en LINQ to Objects usan delegados.

¿Los delegados son lo mismo que las devoluciones de llamada? ¿O están relacionados de alguna manera?


genéricamente, un delegado es un objeto utilizado para acceder a un método externo al objeto que posee el método, mientras que una devolución de llamada es una variable que contiene un delegado

en C #, los términos se usan indistintamente


Una "devolución de llamada" es un término que se refiere a un patrón de diseño de codificación, disponible en cualquier idioma que tenga punteros de función, o un análogo a indicadores de función (que es un poco lo que es un delegado)

En este patrón, pasa un puntero a una función a otra función, de modo que dentro de la función llamada, pueda "recuperar" la función que le pasó. De esta forma puede controlar una gran parte del comportamiento interno de un método desde fuera del método, pasando punteros a diferentes funciones de "devolución de llamada" cada vez que lo llame ... Un ejemplo de devolución de llamada es cuando tiene un algoritmo de clasificación se debe pasar un puntero a una función que "comparará" cualquier par de objetos arbitrarios en la lista que se va a ordenar, para determinar cuál va antes que el otro. En una llamada al método de clasificación, puede pasar una función de devolución de llamada que se compare por nombre de objeto, y otra vez pasar una función que se compare por peso de objeto, o lo que sea ...

Un delegado, otoh, es un tipo .Net específico que actúa como un contenedor específico de firma para un puntero de función ... En el código administrado .Net, los delegados son la única forma de crear y usar un puntero a función. Entonces, en .Net para hacer una devolución de llamada, de hecho está pasando a un delegado ... Pero los delegados pueden usarse en otros escenarios además de las devoluciones de llamada. (específicamente, los delegados también se pueden usar para implementar multi-threading desde el grupo de subprocesos de .Net)

Las devoluciones de llamada también se utilizan para implementar el patrón de "observador" (implementado en .Net utilizando eventos, que a su vez son un tipo especial de delegado)


Están relacionados de la mano. Un delegado es la descripción de cómo se ve la función de devolución de llamada:

delegate void MyDelegate(string Text);

Luego puede tener una función que pueda tomar la devolución de llamada como un parámetro.

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