Delegados en C#

Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.

Un delegado en C# es un tipo que representa una referencia a un método. Se utilizan para encapsular métodos y permitir que sean pasados como parámetros, lo que facilita la programación orientada a eventos y el uso de funciones como objetos de primera clase.

Usos:

Asignar el método que se va a ejecutar cuando suceda cierto evento. Un evento es un mensaje que envía un objeto cuando sucede una acción

MyDelegate.java

public delegate void ShowValue(string uuuuu);
class MyDelegate{
//El evento myEvent llamará al método delegado ShowValue
public event ShowValue myEvent;

public void IterateValues(){
for(int i = 0; i < 10; i++){
//Detonamos el evento myEvent que llamará al método delegado (PrintValue, que viene a sustituir a ShowValue)
myEvent(i.ToString());
}
}
}

En este ejemplo:

  • ShowValue es un delegado que define un método que recibe un string.
  • myEvent es un evento basado en este delegado.
  • IterateValues dispara el evento enviando un valor de i como string.

MainClass.java

class MainClass{
static void Main(){
MyDelegate myDelegate = new MyDelegate();
//Cada vez que ejecute la función PrintValue, se detonará el evento myEvent
myDelegate.myEvent += PrintValue;
myDelegate.IterateValues();
}

private static void PrintValue(string value){
Console.WriteLine(value);
}
}

Definir métodos anónimos

Estos métodos serán los parámetros de entrada de otros métodos. Por ejemplo, el método Find necesita un método anónimo.

Person p1 = new Person();
p1.name = "Paco";
p1.age = 18;
Person p2 = new Person();
p2.name = "Juan";
p2.age = 38;
Person p3 = new Person();
p3.name = "Raquel";
p3.age = 55;
List<Person> persons = new List<Person>();

persons.Add(p1);
persons.Add(p2);
persons.Add(p3);
Person selectedPerson = persons.Find(delegate (Person p) { return p.age == 38; });
Console.WriteLine(selectedPerson.name);
También podíamos haber usado una expresión Lambda
Person selectedPerson = persons.Find( p =>  p.age == 38);

Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.