Devolución de llamada en C#
Hoy veremos qué es una devolución de llamada
en C# y luego revisaremos un código para entender cómo funciona.
¿Qué es una devolución de llamada
en C#
?
Una devolución de llamada
se refiere a algún código pasado como argumento a otro bloque de código que lo ejecuta más tarde. Dos de sus tipos incluyen; devoluciones de llamadas síncronas (inmediatas) y asíncronas (retrasadas).
Las devoluciones de llamada sincrónicas funcionan de inmediato, lo que significa que ocurren tan pronto como se invoca la función. Las devoluciones de llamada asincrónicas (diferidas) a menudo ocurren una vez que la función regresa.
Como habrás adivinado, funciona para operaciones de E/S que tienden a invocar esta función una vez que ocurre algún evento específico.
En C#, usamos algo conocido como delegados
, que son punteros de función y se pueden usar como devoluciones de llamada
.
Entonces, puede definir un método que tome una función como parámetro, y este método luego tiende a devolver la llamada a la función con un mensaje o algo que quiere devolverle. Echemos un vistazo a un ejemplo a continuación.
using System;
public class A {
static void Main(String[] args) {
B func = new B();
func.send_back(callbackMethod);
}
static void callbackMethod(int number) {
Console.WriteLine("The number is: " + number);
}
}
public class B {
public void send_back(Action<int> Callback) {
Callback(4);
}
}
Así que hemos hecho dos clases; “A y B”. A
tiene definida la función Main
e instancia un objeto de clase B
.
En B
, hemos creado un método que toma la función como parámetro y luego invoca esa función. Así que se llama a func
con la función, y luego B
llama a la función con el parámetro 4
, que imprime este número.
Producción :
The number is: 4
El delegado
en el ejemplo anterior es la función: send_back()
. El evento
es la llamada de send_back()
y la devolución de llamada
es la función que se invoca dentro del método send_back
: callbackMethod()
.
Ya hemos llamado a esa función devolución de llamada
dentro del método B
.
Usar delegados
en C#
Un delegado
tiende a apuntar a un método que coincide con sus firmas y puede llamar a esa función con o sin los parámetros definidos en ambos. Entonces, por ejemplo, podemos decir que teníamos las dos funciones, send_back()
y callbackMethod()
, y queremos que una sea el delegado
.
El callbackMethod()
es el delegado
. Así que podemos escribir un código de la siguiente manera.
using System;
public delegate void send_back(int num);
public class B {
public void send_back(Action<int> Callback) {
Callback(4);
}
}
public class Program {
static void Main(String[] args) {
B func = new B();
send_back handle = callbackMethod;
handle(4);
}
static void callbackMethod(int number) {
Console.WriteLine("The number is: " + number);
}
}
El delegado
es send_back
que se instancia mediante un controlador
que apunta al método y luego llama al método con los parámetros correctos. Puede notar que handle(4)
es igual a callbackMethod(4)
.
Esto también parece muy similar a las funciones Lambda
. El código completo se muestra a continuación.
using System;
class classer {
public class A {
// DELEGATE METHOD
public delegate void send_back(int num);
static void Main(String[] args) {
B func = new B();
send_back handle = callbackMethod;
handle(4);
}
static void callbackMethod(int number) {
Console.WriteLine("The number is: " + number);
}
}
// THE CLASS B (THE FIRST CALLBACK METHOD)
public class B {
public void send_back(Action<int> Callback) {
Callback(4);
}
}
}
Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!
GitHub