Delegados en C#

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

Es un tipo que representa una referencia a un método

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());
		}
	}
}
MainClass.javaclass 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.