CSharp
Tutorial CSharp: Delegados
CSharp delegados: uso y ejemplos. Domina el uso de delegados en CSharp con ejemplos prácticos y detallados.
Los delegados en C# son un tipo especial de objeto que puede contener una referencia a un método. En otros términos, un delegado es una especie de puntero seguro a un método. Los delegados en C# son similares a las funciones de puntero en C o C++, pero son más seguros y más orientados a objetos.
Los delegados tienen un tipo que se define por la firma del método que pueden almacenar, es decir, los tipos de los parámetros y el tipo de retorno del método. Una vez definido un delegado, este puede hacer referencia a cualquier método que tenga una coincidencia con el tipo de delegado.
Declaración y uso de delegados
La declaración de un delegado se realiza con la palabra clave delegate
, seguida del tipo de retorno y la firma del método. Por ejemplo, el siguiente delegado puede hacer referencia a cualquier método que no tome parámetros y no devuelva ningún valor:
public delegate void SimpleDelegate();
Para utilizar este delegado, primero debe definirse un método que coincida con su firma:
public void MiMetodo()
{
Console.WriteLine("¡Hola desde MiMetodo!");
}
A continuación, se puede crear una instancia del delegado, pasando el método que se desea referenciar al constructor del delegado:
SimpleDelegate miDelegado = new SimpleDelegate(MiMetodo);
Y ahora puede usarse el delegado para llamar al método:
miDelegado();
Esto imprimirá "¡Hola desde MiMetodo!" en la consola.
Delegados con parámetros y retorno
Los delegados pueden tener parámetros y devolver valores. La firma del delegado debe coincidir con la firma del método. Por ejemplo, el siguiente delegado puede referenciar a cualquier método que tome un int
como parámetro y devuelva un int
:
public delegate int DelegadoConParametro(int num);
Y puede usarse con un método que coincida con esta firma:
public int Duplicar(int num)
{
return num * 2;
}
DelegadoConParametro miDelegado = new DelegadoConParametro(Duplicar);
int resultado = miDelegado(4);
Console.WriteLine(resultado); // Imprime "8"
Delegados predefinidos
C# proporciona algunos delegados predefinidos que pueden se usados para evitar la necesidad de declarar delegados propios. Los más comunes son Action
, Func
y Predicate
.
Action
se utiliza para métodos que no devuelven un valor.Action
puede tener de 0 a 16 parámetros de tipo, que se declaran entre<>
.
Action<string> miAccion = (s) => Console.WriteLine(s);
miAccion("Hola, mundo!");
En el ejemplo anterior, un Action puede referenciar cualquier método que reciba un único string y no devuelva nada. Se le asigna una lambda que recibe un string s
como parámetro, y lo imprime sin devolver nada.
Func
se utiliza para métodos que devuelven un valor.Func
puede tener de 0 a 16 parámetros de tipo, y el último tipo es el tipo de retorno.
Func<int, int, int> sumar = (a, b) => a + b;
int resultado = sumar(3, 4); // resultado es 7
En el ejemplo anterior, un Func<int, int, int> puede referenciar cualquier método que reciba dos int y devuelva un int. Se le asigna una lambda que recibe dos int a
y b
, y devuelve su suma.
Predicate
se utiliza para métodos que toman un parámetro y devuelven unbool
.
Predicate<int> esPar = num => num % 2 == 0;
bool resultado = esPar(4); // resultado es true
En resumen, los delegados son una característica muy útil y flexible de C# que permiten una programación más dinámica y orientada a eventos.
Ejercicios de esta lección Delegados
Evalúa tus conocimientos de esta lección Delegados con nuestros retos de programación de tipo Test, Puzzle, Código y Proyecto con VSCode, guiados por IA.
Excepciones
Operadores
Control de flujo
Polimorfismo
Funciones
Arrays y listas
Variables y constantes
Diccionarios
Variables y constantes
Constructores y destructores
Clases y encapsulación
Polimorfismo
Eventos
Operadores
LINQ
Lambdas
Excepciones
Objetos
Conjuntos, colas y pilas
Tipos de datos
Tipos de datos
Tareas
Diccionarios en C#
Funciones
Funciones
Constructores y destructores
Constructores y destructores
Delegados
Herencia C Sharp
Uso de consultas LINQ
Excepciones
Lambdas
Conjuntos, colas y pilas
Introducción a C#
Diccionarios
Uso de async y await
Tipos de datos
Clases y objetos
Creación de proyecto C#
Herencia
Uso de consultas LINQ
Arrays y listas
Herencia de clases
Clases y encapsulación
Operadores
Arrays y listas
Uso de async y await
Control de flujo
OOP en C Sharp
CRUD en C# de modelo Customer sobre una lista
Objetos
Control de flujo
Tareas
Variables y constantes
Delegados
Eventos
Todas las lecciones de CSharp
Accede a todas las lecciones de CSharp y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.
Introducción A C#
Sintaxis
Creación De Proyecto C#
Sintaxis
Variables Y Constantes
Sintaxis
Tipos De Datos
Sintaxis
Operadores
Sintaxis
Control De Flujo
Sintaxis
Funciones
Sintaxis
Clases Y Encapsulación
Programación Orientada A Objetos
Objetos
Programación Orientada A Objetos
Constructores Y Destructores
Programación Orientada A Objetos
Herencia
Programación Orientada A Objetos
Polimorfismo
Programación Orientada A Objetos
Excepciones
Excepciones
Arrays Y Listas
Colecciones Y Linq
Diccionarios
Colecciones Y Linq
Conjuntos, Colas Y Pilas
Colecciones Y Linq
Uso De Consultas Linq
Colecciones Y Linq
Delegados
Programación Asíncrona
Eventos
Programación Asíncrona
Lambdas
Programación Asíncrona
Uso De Async Y Await
Programación Asíncrona
Tareas
Programación Asíncrona
En esta lección
Objetivos de aprendizaje de esta lección
- Comprender el concepto de delegados en C# y su función como punteros a métodos.
- Aprender a declarar y utilizar delegados para referenciar y ejecutar métodos.
- Conocer cómo se pueden utilizar delegados con parámetros y valores de retorno.
- Familiarizarse con los delegados predefinidos
Action
,Func
yPredicate
para evitar la necesidad de declarar delegados propios. - Entender cómo los delegados permiten una programación más dinámica y orientada a eventos en C#.