AYUDA .NET

C# Ref (Cómo funciona para desarrolladores)

Chipego
Chipego Kalinda
29 de abril, 2024
Compartir:

En C#, la palabra clave ref es una característica poderosa que permite a los métodos modificar el valor del parámetro de las variables de tipo referencia pasadas. Entender cómo usar ref puede mejorar tu capacidad para gestionar y manipular datos dentro de tus aplicaciones.

Este artículo te guiará a través de los conceptos básicos de la palabra clave ref, su aplicación y las particularidades de su uso con diferentes tipos de datos. También aprenderemos sobre la biblioteca IronPDF para .NET, que es una biblioteca PDF.

Comprender los parámetros de referencia

Un parámetro ref es un parámetro de método que actúa como una referencia a la variable pasada al método. A diferencia de los parámetros de valor estándar, donde solo se pasa una copia de la variable, los parámetros ref permiten que el método llamado modifique el valor original de la variable. Este comportamiento es crucial cuando se necesita que un método actualice el estado de las variables que se le pasan.

Considere el siguiente ejemplo para demostrar el uso básico de ref, centrándose en cómo una variable de tipo referencia retiene su valor de parámetro en el mismo objeto a lo largo de las llamadas a métodos:

class Program
{
    static void Main()
    {
        int number = 100;
        ModifyNumber(ref number);
        Console.WriteLine(number);
    }
    static void ModifyNumber(ref int number)
    {
        number = 200;
    }
}
class Program
{
    static void Main()
    {
        int number = 100;
        ModifyNumber(ref number);
        Console.WriteLine(number);
    }
    static void ModifyNumber(ref int number)
    {
        number = 200;
    }
}
Friend Class Program
	Shared Sub Main()
		Dim number As Integer = 100
		ModifyNumber(number)
		Console.WriteLine(number)
	End Sub
	Private Shared Sub ModifyNumber(ByRef number As Integer)
		number = 200
	End Sub
End Class
$vbLabelText   $csharpLabel

En este ejemplo, el método Main declara un entero number y lo inicializa a 100. Luego llama a ModifyNumber, pasando number como un parámetro ref. Dentro de ModifyNumber, el valor de number se cambia a 200. Dado que number se pasa por referencia, el cambio se refleja en el valor original en el método Main y 200 se imprime en la consola.

Cómo funcionan los parámetros de referencia

Cuando declaras un parámetro de método con la palabra clave ref, le estás indicando al compilador que el parámetro hará referencia a la variable original en lugar de a una copia. Esto se consigue pasando la dirección de memoria de la variable, en lugar del valor real. Tanto el método llamado como el método invocador acceden a la misma posición de memoria, lo que significa que cualquier cambio realizado en el parámetro se realiza directamente en la variable original.

La clave para entender ref es reconocer que se puede usar tanto con tipos de valor como con tipos de referencia. Los tipos de valor incluyen tipos de datos simples como enteros y estructuras, mientras que los tipos de referencia incluyen objetos y matrices. Sin embargo, a pesar de que las variables de tipo de referencia inherentemente contienen direcciones de memoria, usar ref con tipos de referencia te permite modificar la referencia real, no solo el contenido del objeto.

Diferencias entre ref y out

Aunque las palabras clave ref y out permiten modificar las variables originales, existen diferencias importantes. Un parámetro out no requiere inicialización antes de ser pasado a un método. Por el contrario, un parámetro ref requiere que la variable sea inicializada antes de ser pasada. Además, un método que utiliza un parámetro out está obligado a asignar un valor antes de que el método devuelva. Este requisito no se aplica a los parámetros ref.

Aquí te mostramos cómo podrías usar la palabra clave out:

class Program
{
    static void Main()
    {
        int result;
        CalculateResult(out result);
        Console.WriteLine(result);
    }
    static void CalculateResult(out int calculation)
    {
        calculation = 20 * 5;
    }
}
class Program
{
    static void Main()
    {
        int result;
        CalculateResult(out result);
        Console.WriteLine(result);
    }
    static void CalculateResult(out int calculation)
    {
        calculation = 20 * 5;
    }
}
Friend Class Program
	Shared Sub Main()
		Dim result As Integer = Nothing
		CalculateResult(result)
		Console.WriteLine(result)
	End Sub
	Private Shared Sub CalculateResult(ByRef calculation As Integer)
		calculation = 20 * 5
	End Sub
End Class
$vbLabelText   $csharpLabel

En este caso, CalculateResult inicializa el calculation dentro del método, y Main refleja el resultado.

Uso práctico de ref en la sobrecarga de métodos

ref también se puede utilizar en la sobrecarga de métodos, donde la firma del método se altera con la palabra clave ref. Las firmas de los métodos están compuestas por el nombre del método y sus tipos de parámetros, incluyendo si los parámetros se pasan por referencia (ref), por valor o como un parámetro out.

Considere sobrecargar métodos basados en parámetros ref y de valor:

class Program
{
    static void Main()
    {
        int normalParameter = 10, refParameter = 10;
        IncrementValue(normalParameter);
        IncrementValue(ref refParameter);
        Console.WriteLine($"Normal: {normalParameter}, Ref: {refParameter}");
    }
    static void IncrementValue(int number)
    {
        number++;
    }
    static void IncrementValue(ref int number)
    {
        number++;
    }
}
class Program
{
    static void Main()
    {
        int normalParameter = 10, refParameter = 10;
        IncrementValue(normalParameter);
        IncrementValue(ref refParameter);
        Console.WriteLine($"Normal: {normalParameter}, Ref: {refParameter}");
    }
    static void IncrementValue(int number)
    {
        number++;
    }
    static void IncrementValue(ref int number)
    {
        number++;
    }
}
Friend Class Program
	Shared Sub Main()
		Dim normalParameter As Integer = 10, refParameter As Integer = 10
		IncrementValue(normalParameter)
		IncrementValue(refParameter)
		Console.WriteLine($"Normal: {normalParameter}, Ref: {refParameter}")
	End Sub
'INSTANT VB TODO TASK: VB does not allow method overloads which differ only in parameter ByVal/ByRef:
'ORIGINAL LINE: static void IncrementValue(int number)
	Private Shared Sub IncrementValue(ByVal number As Integer)
		number += 1
	End Sub
'INSTANT VB TODO TASK: VB does not allow method overloads which differ only in parameter ByVal/ByRef:
'ORIGINAL LINE: static void IncrementValue(ref int number)
	Private Shared Sub IncrementValue(ByRef number As Integer)
		number += 1
	End Sub
End Class
$vbLabelText   $csharpLabel

Aquí, IncrementValue está sobrecargado con una versión que toma un parámetro normal y otra que toma un parámetro ref. La versión ref incrementa la variable original, mientras que la versión normal solo cambia una copia.

Introducción a IronPDF

Referencia de C# (Cómo Funciona para Desarrolladores): Figura 1

IronPDF for .NET PDF Solutions es una biblioteca .NET integral diseñada para trabajar con documentos PDF. Está construido principalmente en C# y se enfoca en simplificar la creación y manipulación de PDFs a partir de contenido HTML. Al emplear un motor de renderizado de Chrome, IronPDF proporciona documentos PDF de alta calidad y con píxeles perfectos que capturan los matices del contenido HTML, CSS, JavaScript e imágenes.

Esta biblioteca es versátil y compatible con una amplia gama de entornos .NET, incluidos .NET Framework, .NET Core y .NET Standard, lo que la hace adecuada para diversas aplicaciones, desde sistemas de escritorio hasta sistemas basados en web. IronPDF no sólo permite crear PDF, sino que también ofrece funciones de edición, protección y conversión de PDF a otros formatos.

Esta capacidad se extiende a la extracción de texto e imágenes, el rellenado de formularios e incluso la aplicación de firmas digitales, lo que garantiza un manejo completo de los documentos PDF dentro de las aplicaciones .NET.

Integración de IronPDF con C# y ref Palabra clave

IronPDF se puede integrar con C# para aprovechar las características robustas del lenguaje, incluido el uso de la palabra clave ref para pasar parámetros por referencia. Esta integración permite generar PDF dinámicos cuyo contenido puede depender de variables cuyos valores se determinan en tiempo de ejecución.

Para ilustrar la integración de IronPDF con C# usando la palabra clave ref, considere un escenario en el que queremos generar un informe PDF que incluya un valor calculado dinámicamente. Este valor se calculará dentro de un método que acepta un parámetro ref, lo que permite que el método modifique este valor, que luego se refleja en el PDF generado.

Ejemplo de código: Generación de un PDF con contenido dinámico mediante ref

El siguiente código C# demuestra cómo usar IronPDF junto con la palabra clave ref para generar un documento PDF. El código calcula un valor, lo modifica mediante un método que acepta un parámetro ref, y luego utiliza IronPDF para generar un PDF que incluye este contenido dinámico.

using IronPdf;
using System;
class Program
{
    static void Main(string [] args)
    {
        License.LicenseKey = "License-Key";
        // Initialize the value
        int totalSales = 150;
        // Modify the value within the method using 'ref'
        AddMonthlyBonus(ref totalSales);
        // Use IronPDF to generate a PDF report
        var Renderer = new ChromePdfRenderer();
        var PDF = Renderer.RenderHtmlAsPdf($"<h1>Monthly Sales Report</h1><p>Total Sales, including bonus: {totalSales}</p>");
        // Save the PDF to a file
        PDF.SaveAs("MonthlySalesReport.pdf");
        // Confirm the PDF has been generated
        Console.WriteLine("PDF generated successfully. Check your project directory.");
    }
    static void AddMonthlyBonus(ref int sales)
    {
        // Assume a bonus of 10% of the sales
        sales += (int)(sales * 0.1);
    }
}
using IronPdf;
using System;
class Program
{
    static void Main(string [] args)
    {
        License.LicenseKey = "License-Key";
        // Initialize the value
        int totalSales = 150;
        // Modify the value within the method using 'ref'
        AddMonthlyBonus(ref totalSales);
        // Use IronPDF to generate a PDF report
        var Renderer = new ChromePdfRenderer();
        var PDF = Renderer.RenderHtmlAsPdf($"<h1>Monthly Sales Report</h1><p>Total Sales, including bonus: {totalSales}</p>");
        // Save the PDF to a file
        PDF.SaveAs("MonthlySalesReport.pdf");
        // Confirm the PDF has been generated
        Console.WriteLine("PDF generated successfully. Check your project directory.");
    }
    static void AddMonthlyBonus(ref int sales)
    {
        // Assume a bonus of 10% of the sales
        sales += (int)(sales * 0.1);
    }
}
Imports IronPdf
Imports System
Friend Class Program
	Shared Sub Main(ByVal args() As String)
		License.LicenseKey = "License-Key"
		' Initialize the value
		Dim totalSales As Integer = 150
		' Modify the value within the method using 'ref'
		AddMonthlyBonus(totalSales)
		' Use IronPDF to generate a PDF report
		Dim Renderer = New ChromePdfRenderer()
		Dim PDF = Renderer.RenderHtmlAsPdf($"<h1>Monthly Sales Report</h1><p>Total Sales, including bonus: {totalSales}</p>")
		' Save the PDF to a file
		PDF.SaveAs("MonthlySalesReport.pdf")
		' Confirm the PDF has been generated
		Console.WriteLine("PDF generated successfully. Check your project directory.")
	End Sub
	Private Shared Sub AddMonthlyBonus(ByRef sales As Integer)
		' Assume a bonus of 10% of the sales
		sales += CInt(Math.Truncate(sales * 0.1))
	End Sub
End Class
$vbLabelText   $csharpLabel

C# Ref (Cómo Funciona Para Desarrolladores): Figura 2

En este ejemplo, totalSales comienza en 150. El método AddMonthlyBonus toma este valor por referencia utilizando la palabra clave ref, calcula un bono del 10% y lo añade al valor original de ventas. IronPDF genera entonces un documento PDF que contiene un fragmento HTML que informa de las ventas totales, incluida la bonificación. El documento final se guarda localmente como "MonthlySalesReport.pdf".

Conclusión

C# Ref (Cómo Funciona para Desarrolladores): Figura 3

Comprender la palabra clave ref en C# proporciona una herramienta valiosa para gestionar cómo se pasan los datos entre métodos. Al permitir que los métodos modifiquen directamente los valores originales de los parámetros que se les pasan, ref puede hacer que tus métodos sean más flexibles y potentes.

A medida que adquieras experiencia con ref, comprenderás mejor cuándo y cómo usarlo de manera efectiva para satisfacer tus necesidades de programación. IronPDF ofrece una prueba gratuita para comenzar con las capacidades de PDF y los precios comienzan desde $749.

Chipego
Ingeniero de software
Chipego tiene una habilidad natural para escuchar que le ayuda a comprender los problemas de los clientes y a ofrecer soluciones inteligentes. Se unió al equipo de Iron Software en 2023, después de estudiar una licenciatura en Tecnología de la Información. IronPDF e IronOCR son los dos productos en los que Chipego se ha centrado, pero su conocimiento de todos los productos crece día a día, a medida que encuentra nuevas formas de ayudar a los clientes. Disfruta de lo colaborativa que es la vida en Iron Software, con miembros del equipo de toda la empresa que aportan su variada experiencia para contribuir a soluciones eficaces e innovadoras. Cuando Chipego está lejos de su escritorio, a menudo se le puede encontrar disfrutando de un buen libro o jugando al fútbol.
< ANTERIOR
MS Graph .NET (Cómo funciona para desarrolladores)
SIGUIENTE >
Mudblazor .NET 8 (Cómo funciona para los desarrolladores)