AYUDA .NET

Acción C# (Cómo funciona para desarrolladores)

Actualizado 3 de abril, 2024
Compartir:

En este tutorial enseñaremos los conceptos de C# Action, Func delegate, y temas relacionados. Esta guía está pensada para principiantes y le guiará a través de los conceptos básicos, le proporcionará ejemplos y le explicará los términos clave de delegado de acción.

Empecemos por entender qué son los delegados en C#. Exploraremos IronPDF más adelante en el artículo.

Comprensión de los delegados en C#

Los delegados son una construcción de programación que actúa como referencias a métodos, definidos por un conjunto particular de parámetros y un tipo de retorno, encapsulando funcionalidades como el tipo de delegado predefinido y permitiendo que los métodos devuelvan valores.

Permite pasar métodos como argumentos. Esencialmente, un delegado sirve como puntero a una función, apuntando al método que representa. En C#, hay dos tipos de delegados predefinidos que son ampliamente utilizados: Func y Action.

¿Qué es un delegado Func?

El delegado Func representa un método que puede tener un valor de retorno. El último parámetro de tipo especifica el tipo de retorno, y los tipos anteriores especifican los parámetros de entrada.

Por ejemplo, un Func<int, int, string> toma dos parámetros enteros y devuelve un mensaje de cadena.

Delegados en la práctica: Ejemplos

Veamos algunos ejemplos para entender cómo funcionan los delegados Func y Action en C#.

Ejemplo de delegado de acción

Un delegado de acción, un tipo de delegado predefinido, se utiliza cuando se desea ejecutar un método que no devuelve específicamente un valor, centrándose en cambio en las operaciones. He aquí un ejemplo básico:

Action<string> display = message => Console.WriteLine(message);
display("Hello, World!");
Action<string> display = message => Console.WriteLine(message);
display("Hello, World!");
Dim display As Action(Of String) = Sub(message) Console.WriteLine(message)
display("Hello, World!")
VB   C#

Este código define un delegado de Acción, ilustrando el uso de un método anónimo, que toma un único parámetro de cadena y lo imprime en la consola. El símbolo => se utiliza para definir una expresión lambda, que es una forma concisa de escribir métodos anónimos.

Ejemplo de delegado Func

Un delegado Func, que devuelve un valor, puede utilizarse de la siguiente manera:

Func<int, int, int> add = (x, y) => x + y;
int result = add(5, 3);
Console.WriteLine(result);
Func<int, int, int> add = (x, y) => x + y;
int result = add(5, 3);
Console.WriteLine(result);
Dim add As Func(Of Integer, Integer, Integer) = Function(x, y) x + y
Dim result As Integer = add(5, 3)
Console.WriteLine(result)
VB   C#

Este ejemplo crea un delegado Func que toma dos parámetros enteros y devuelve su suma. La suma se mostrará así en la consola:

Acción C# (Cómo funciona para los desarrolladores): Figura 1

Conceptos clave

Métodos anónimos

Los métodos anónimos de C# permiten definir métodos en línea sin nombre. A menudo se utilizan con delegados para crear instancias de delegado directamente.

Expresiones lambda

Las expresiones lambda son una forma abreviada de escribir métodos anónimos. Permiten escribir menos código logrando el mismo resultado.

Delegado genérico

Un delegado genérico puede trabajar con cualquier tipo de datos. Func y Action son ejemplos de delegados genéricos, que proporcionan más flexibilidad al permitir especificar los tipos de entrada y salida en tiempo de ejecución.

Instancia delegada

Una instancia de delegado se crea con la palabra clave new o simplemente asignando un método que coincida con la firma del delegado.

Espacio de nombres del sistema

El espacio de nombres System en .NET contiene tipos incorporados como Func y Action, que forman parte de la biblioteca de clases base.

Programación asíncrona con delegados

Los delegados, incluyendo Action y Func, son parte integral de la gestión de tareas asíncronas en C#. Permiten a los desarrolladores encapsular una referencia a un método que puede ejecutarse de forma asíncrona. Esto significa que el hilo principal de la aplicación puede iniciar una tarea y luego continuar con otro trabajo hasta que la tarea se haya completado.

En ese momento, se llama a un método de devolución de llamada, referenciado por un delegado, para gestionar el resultado. Este patrón es vital para crear interfaces de usuario con capacidad de respuesta que sigan siendo interactivas incluso cuando se realizan operaciones de larga duración.

Ejemplo: Procesamiento asíncrono de archivos

Considere una aplicación que necesita procesar un archivo grande. El uso de un delegado Action junto con patrones de programación asíncronos como Task puede mejorar significativamente el rendimiento de la aplicación:

public async Task ProcessFileAsync(string filePath, Action<string> onComplete)
{
    //  Leer de forma asíncrona el contenido de un archivo
    string fileContent = await File.ReadAllTextAsync(filePath);
    //  Procese aquí el contenido del fichero (omitido por brevedad)
    //  Una vez finalizado el procesamiento, invoque la llamada de retorno onComplete
    onComplete?.Invoke("File processing completed successfully.");
}
public async Task ProcessFileAsync(string filePath, Action<string> onComplete)
{
    //  Leer de forma asíncrona el contenido de un archivo
    string fileContent = await File.ReadAllTextAsync(filePath);
    //  Procese aquí el contenido del fichero (omitido por brevedad)
    //  Una vez finalizado el procesamiento, invoque la llamada de retorno onComplete
    onComplete?.Invoke("File processing completed successfully.");
}
Public Async Function ProcessFileAsync(ByVal filePath As String, ByVal onComplete As Action(Of String)) As Task
	'  Leer de forma asíncrona el contenido de un archivo
	Dim fileContent As String = Await File.ReadAllTextAsync(filePath)
	'  Procese aquí el contenido del fichero (omitido por brevedad)
	'  Una vez finalizado el procesamiento, invoque la llamada de retorno onComplete
	If onComplete IsNot Nothing Then
		onComplete.Invoke("File processing completed successfully.")
	End If
End Function
VB   C#

En este ejemplo, File.ReadAllTextAsync se utiliza para leer el contenido del archivo sin bloquear el hilo principal. Una vez procesado el archivo, se invoca a un delegado Action llamado onComplete para notificar a la persona que llama que la operación se ha completado, permitiendo acciones posteriores como la actualización de la interfaz de usuario o el registro de resultados.

Introducción de IronPDF: Una biblioteca C# PDF

IronPDF es una completa biblioteca PDF en C# diseñada para que los desarrolladores .NET puedan crear, editar y manipular archivos PDF con facilidad. Se distingue por un motor de renderizado basado en Chrome, que garantiza PDF perfectos a partir de HTML CSS, JavaScript e imágenes.

IronPDF es compatible con una amplia gama de marcos y entornos .NET, incluidos .NET Standard, .NET Framework y .NET Core, en las plataformas Windows, Linux y macOS.

Instalación de IronPDF

Para incorporar IronPDF a sus proyectos .NET, puede utilizar NuGet, que es el método más sencillo. Basta con abrir la consola del gestor de paquetes en Visual Studio y ejecutar el siguiente comando:

Install-Package IronPdf

Este comando obtiene e instala el paquete IronPDF, configurando su proyecto para comenzar a utilizar IronPDF para la generación y manipulación de PDF.

Ejemplo de código con Action Delegate

A continuación se muestra un ejemplo sencillo que demuestra cómo utilizar IronPDF junto con un delegado de acción para realizar una tarea de generación de PDF:

using IronPdf;
using System;
class Program
{
    static void Main(string [] args)
    {
        var renderer = new ChromePdfRenderer();
        Action<string> generatePdf = html =>
        {
            var pdf = renderer.RenderHtmlAsPdf(html);
            pdf.SaveAs("example.pdf");
        };
        generatePdf("<p>Hello, world!</p>");
        Console.WriteLine("PDF generated successfully.");
    }
}
using IronPdf;
using System;
class Program
{
    static void Main(string [] args)
    {
        var renderer = new ChromePdfRenderer();
        Action<string> generatePdf = html =>
        {
            var pdf = renderer.RenderHtmlAsPdf(html);
            pdf.SaveAs("example.pdf");
        };
        generatePdf("<p>Hello, world!</p>");
        Console.WriteLine("PDF generated successfully.");
    }
}
Imports IronPdf
Imports System
Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim renderer = New ChromePdfRenderer()
		Dim generatePdf As Action(Of String) = Sub(html)
			Dim pdf = renderer.RenderHtmlAsPdf(html)
			pdf.SaveAs("example.pdf")
		End Sub
		generatePdf("<p>Hello, world!</p>")
		Console.WriteLine("PDF generated successfully.")
	End Sub
End Class
VB   C#

Este ejemplo define un delegado de acción que toma una cadena de HTML y utiliza IronPDF para convertirla en un documento PDF.

A continuación, el PDF generado se guarda en el sistema de archivos. Este enfoque demuestra cómo pueden utilizarse los delegados para encapsular la lógica de generación de PDF, haciendo que el código sea más modular y flexible.

Acción C# (Cómo funciona para los desarrolladores): Figura 2

Licencias

Acción C# (Cómo funciona para los desarrolladores): Figura 3

IronPDF ofrece varios opciones de licencia desde licencias individuales para desarrolladores hasta acuerdos para empresas. Los precios de estas licencias empiezan a partir de $749.

Conclusión

Por ahora, usted debe tener una comprensión básica de Action y Func delegados en C #, junto con la forma de utilizar métodos anónimos y expresiones lambda. Recuerda, la práctica es clave para dominar los conceptos de delegado. Intenta crear tus propios ejemplos para definir, asignar e invocar delegados.

Puede explorar libremente las capacidades de IronPDF con su prueba gratuita. Si se adapta a los requisitos de su proyecto, puede obtener una licencia a partir de $749.

< ANTERIOR
C# Record (Cómo funciona para los desarrolladores)
SIGUIENTE >
C# Orientado a Objetos (Cómo funciona para desarrolladores)

¿Listo para empezar? Versión: 2024.7 recién publicada

Descarga gratuita de NuGet Descargas totales: 9,974,197 Ver licencias >
123