Delegados — RexDac Academy

RexDac AcademyNotas técnicas · Ayuda tener algunos conocimientos previos
0%Notas publicadas leídas · en este dispositivo

Nivel 6 — Genéricos y delegados

Delegados

Notas originales de SunDiaL · Ver fuente en inglés

En Operandos mencioné brevemente cómo las propias operaciones pueden convertirse en operandos. Los delegados son la característica que nos permite hacerlo. Permiten tratar las funciones como valores: asignarlas a variables, pasarlas de un lugar a otro e invocarlas más adelante. Digo «delegados», pero en realidad aquí hay dos cosas distintas.

Tipo de delegado

El tipo de delegado, por si el nombre no lo dejaba claro, es el tipo. De forma similar a las clases, primero hay que comunicar al ordenador que este tipo existe y describir cómo es. Esto es una sentencia declarativa, cuya sintaxis es ReturnType + DelegateName + Parameters. Su firma, por así decirlo, aunque no es exactamente la misma firma.

public delegate void Writer(string message);

Nota: Los delegados tienen los mismos modificadores de acceso que las clases.

Delegado

El delegado es la variable. La única diferencia respecto a otras variables es que contiene funciones que coinciden con lo que especifica el tipo de delegado.

Un delegado puede contener más de una función.

public void Main()
{
	Writer log = Console.WriteLine; //Notice the absence of "()". myDelegateName is not 
											   //assigned the result of WriteLine, it is assigned the 
											   //function itself.

	log += File.WriteLine; //Notice the "+=". Multiple functions can be added
									  // (or removed with -=) to the same delegate.

	log("Hello world"); //actual function call. This calls both Console.WriteLine() 
								   //and File.WriteLine()
}

Nota: Un delegado puede sobrescribirse, lo que nos lleva al siguiente tema:

Eventos