Ir para o conteúdo do rodapé
AJUDA DO .NET

Passagem por referência em C# (Como funciona para desenvolvedores)

O gerenciamento eficiente de memória e a manipulação de dados são componentes essenciais para a criação de código de alto desempenho no mundo da programação. Escrever código eficiente e sem erros exige compreender como os dados são transmitidos entre métodos e funções em linguagens como C#. Um conceito crucial para este procedimento é o de "passagem por referência". Neste artigo, exploraremos o significado de passagem por referência em C# e cenários de uso apropriados.

Como usar a passagem por referência em C

  1. Defina um método com parâmetros de referência.
  2. Inicialize uma variável.
  3. Chame o método com a palavra-chave ref.
  4. Modifique a variável dentro do método.
  5. Observe as mudanças no método principal.
  6. Defina outro método com parâmetro de saída para gerar o PDF.
  7. Inicialize e chame o método Out.

O que é passagem por referência em C#?

Utilizar uma referência para passar argumentos refere-se à maneira como, em C#, se envia argumentos para funções ou métodos, fornecendo uma referência à variável inicial do método chamado, em vez de uma cópia de seu valor. Isso implica que quaisquer alterações feitas no parâmetro dentro do método também terão impacto na variável inicial fora do método.

Em C#, variáveis ​​de tipo valor (como int, float, bool, etc.) geralmente são fornecidas por valor, o que significa que o método recebe uma cópia do valor da variável. No entanto, você pode instruir o compilador a passar argumentos por referência usando a palavra-chave ref.

Usando a palavra-chave ref

Em C#, argumentos podem ser criados para parâmetros de referência passados ​​por referência usando a palavra-chave ref. Qualquer modificação feita em um parâmetro fornecido por referência usando a palavra-chave ref terá impacto na variável original.

class Program
{
    static void Main(string[] args)
    {
        int num = 10;
        Console.WriteLine("Before: " + num); // Output: Before: 10
        ModifyByRef(ref num);
        Console.WriteLine("After: " + num);  // Output: After: 20
    }

    // Method that modifies the integer by reference
    static void ModifyByRef(ref int x)
    {
        x = x * 2; // Modify the original value by reference
    }
}
class Program
{
    static void Main(string[] args)
    {
        int num = 10;
        Console.WriteLine("Before: " + num); // Output: Before: 10
        ModifyByRef(ref num);
        Console.WriteLine("After: " + num);  // Output: After: 20
    }

    // Method that modifies the integer by reference
    static void ModifyByRef(ref int x)
    {
        x = x * 2; // Modify the original value by reference
    }
}
Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim num As Integer = 10
		Console.WriteLine("Before: " & num) ' Output: Before: 10
		ModifyByRef(num)
		Console.WriteLine("After: " & num) ' Output: After: 20
	End Sub

	' Method that modifies the integer by reference
	Private Shared Sub ModifyByRef(ByRef x As Integer)
		x = x * 2 ' Modify the original value by reference
	End Sub
End Class
$vbLabelText   $csharpLabel

O método ModifyByRef no exemplo acima usa a palavra-chave ref para receber um parâmetro inteiro, x, por referência. Quaisquer modificações feitas no parâmetro de referência x dentro do método têm um impacto imediato na variável num fora do método quando o método é invocado com ref num.

A palavra-chave out

A palavra-chave out é usada para passar parâmetros por referência para o método de chamada, assim como ref. Como resultado, os métodos são capazes de retornar inúmeros valores.

class Program
{
    static void Main(string[] args)
    {
        int result;
        Calculate(10, 5, out result);
        Console.WriteLine("Result: " + result); // Output: Result: 15
    }

    // Method that calculates the sum of two integers and outputs the result by reference
    static void Calculate(int x, int y, out int result)
    {
        result = x + y; // Assign the sum to the out parameter
    }
}
class Program
{
    static void Main(string[] args)
    {
        int result;
        Calculate(10, 5, out result);
        Console.WriteLine("Result: " + result); // Output: Result: 15
    }

    // Method that calculates the sum of two integers and outputs the result by reference
    static void Calculate(int x, int y, out int result)
    {
        result = x + y; // Assign the sum to the out parameter
    }
}
Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim result As Integer = Nothing
		Calculate(10, 5, result)
		Console.WriteLine("Result: " & result) ' Output: Result: 15
	End Sub

	' Method that calculates the sum of two integers and outputs the result by reference
	Private Shared Sub Calculate(ByVal x As Integer, ByVal y As Integer, ByRef result As Integer)
		result = x + y ' Assign the sum to the out parameter
	End Sub
End Class
$vbLabelText   $csharpLabel

Neste exemplo, são passados ​​para o método x dois parâmetros inteiros, y, bem como um parâmetro extra result denotado pela palavra-chave out. O resultado é atribuído ao parâmetro result após o procedimento calcular a soma de x e y. O result não precisa ser inicializado antes de ser enviado ao método porque está marcado como out.

Quando usar a passagem por referência

Escrever código eficiente e de fácil manutenção requer saber quando utilizar passagem por referência. As seguintes situações exigem o uso de passagem por referência:

Modificando múltiplas variáveis

Passar os parâmetros por referência pode ser útil quando um método precisa alterar várias variáveis ​​e essas alterações precisam ser refletidas fora do método. Em vez de o procedimento retornar múltiplos valores, as variáveis ​​podem ser enviadas por referência e alteradas diretamente dentro do método.

// Method that modifies multiple variables by reference
static void ModifyMultipleByRef(ref int a, ref int b)
{
    a *= 2; // Double the first variable
    b *= 3; // Triple the second variable
}
// Method that modifies multiple variables by reference
static void ModifyMultipleByRef(ref int a, ref int b)
{
    a *= 2; // Double the first variable
    b *= 3; // Triple the second variable
}
' Method that modifies multiple variables by reference
Shared Sub ModifyMultipleByRef(ByRef a As Integer, ByRef b As Integer)
	a *= 2 ' Double the first variable
	b *= 3 ' Triple the second variable
End Sub
$vbLabelText   $csharpLabel

Estruturas de Big Data

Ao evitar a duplicação desnecessária de dados, passar estruturas de dados grandes — como arrays ou objetos complexos — por referência pode aumentar a eficiência. A passagem por referência deve ser usada com cautela ao trabalhar com estruturas de dados grandes, pois pode ter consequências inesperadas se não for tratada adequadamente.

Interoperabilidade com código externo

Pode ser necessário enviar argumentos por referência para cumprir tanto a definição do método quanto os requisitos do código externo ao interagir com bibliotecas externas ou integrar código nativo.

O que é o IronPDF?

O IronPDF permite que programadores criem, modifiquem e renderizem documentos PDF em aplicativos .NET . Seu vasto conjunto de recursos torna o trabalho com arquivos PDF simples. Você pode criar documentos PDF a partir de HTML, fotos e outros formatos; Anotar PDFs com texto, imagens e outros dados; e dividir, mesclar e editar documentos PDF preexistentes.

A principal funcionalidade do IronPDF é a capacidade de converter HTML em PDF , garantindo a preservação de layouts e estilos. Essa funcionalidade é excelente para gerar PDFs a partir de conteúdo da web, como relatórios, faturas e documentação. Ele converte arquivos HTML, URLs e strings HTML em arquivos PDF.

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
Imports IronPdf

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim renderer = New ChromePdfRenderer()

		' 1. Convert HTML String to PDF
		Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"
		Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent)
		pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf")

		' 2. Convert HTML File to PDF
		Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file
		Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath)
		pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf")

		' 3. Convert URL to PDF
		Dim url = "http://ironpdf.com" ' Specify the URL
		Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
		pdfFromUrl.SaveAs("URLToPDF.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

Funcionalidades do IronPDF

Anotação de texto e imagem

O IronPDF permite adicionar texto, imagens e anotações a documentos PDF de forma programática. Graças a essa funcionalidade, você pode adicionar anotações, carimbos e comentários a arquivos PDF.

Segurança de PDF

O IronPDF permite especificar diferentes permissões, incluindo impressão, cópia de conteúdo e edição do documento, além de criptografar documentos PDF com senhas. Isso ajuda você a controlar o acesso a arquivos PDF e a proteger dados confidenciais.

Preenchimento de formulários PDF interativos

O IronPDF permite preencher formulários PDF interativos de forma programática. Essa funcionalidade é útil para criar documentos personalizados usando informações inseridas pelo usuário ou para automatizar o envio de formulários.

Compressão e otimização de PDF

Para minimizar o tamanho do arquivo sem sacrificar a qualidade, o IronPDF oferece soluções tanto para compressão quanto para otimização de arquivos PDF. Isso reduz a quantidade de armazenamento necessária para documentos PDF, ao mesmo tempo que melhora o desempenho.

Compatibilidade entre plataformas

O IronPDF foi desenvolvido para funcionar perfeitamente com aplicativos .NET destinados a Windows, Linux e macOS, entre outras plataformas. Frameworks populares do .NET, como ASP.NET, .NET Core e Xamarin, estão integrados a ele.

Criar um novo projeto do Visual Studio

É fácil criar um projeto de console com o Visual Studio. Para criar um aplicativo de console, faça o seguinte no Visual Studio:

Antes de iniciar o desenvolvimento com o Visual Studio , certifique-se de que ele esteja instalado em seu computador.

Iniciar um novo projeto

Selecione Arquivo, depois Novo e, por último, Projeto.

Passagem por Referência em C# (Como Funciona para Desenvolvedores): Figura 1

No lado esquerdo da caixa "Criar um novo projeto", selecione a linguagem de programação de sua preferência (C#, por exemplo).

O modelo "Aplicativo de Console" ou "Aplicativo de Console (.NET Core)" pode ser escolhido na seguinte lista de modelos de projeto.

Dê um nome ao seu projeto no campo "Nome".

Passagem por Referência em C# (Como Funciona para Desenvolvedores): Figura 2

Selecione o local de armazenamento onde deseja guardar o projeto.

Pressione "Criar" para iniciar o projeto do aplicativo de console.

Passagem por Referência em C# (Como Funciona para Desenvolvedores): Figura 3

Instalando o IronPDF

Em Ferramentas, nas Ferramentas do Visual Studio, você encontrará a interface de linha de comando do Visual Studio. Selecione o gerenciador de pacotes para o NuGet. Na aba do terminal de gerenciamento de pacotes, você deve digitar o seguinte comando.

Install-Package IronPdf

Uma alternativa adicional é usar o Gerenciador de Pacotes. É possível instalar o pacote diretamente na solução usando a opção Gerenciador de Pacotes NuGet . Utilize a caixa de pesquisa no site do NuGet para localizar pacotes. A captura de tela a seguir ilustra como é fácil procurar por "IronPDF" no gerenciador de pacotes:

Passagem por Referência em C# (Como Funciona para Desenvolvedores): Figura 4 - Instalando o IronPDF a partir do gerenciador de pacotes NuGet

A lista de resultados de pesquisa relevantes pode ser vista na imagem acima. Para permitir a instalação do software em seu computador, ajuste estas configurações.

Após o download e a instalação do pacote, ele poderá ser utilizado no projeto atual.

Utilizando a passagem por referência com o IronPDF

Esta é uma ilustração de como usar o recurso de passagem por referência do IronPDF.

using IronPdf;
using System;

class Program
{
    static void Main(string[] args)
    {
        // Create a PDF document
        var pdf = new IronPdf.HtmlToPdf();
        // HTML content to be converted to PDF
        string htmlContent = "<h1>Hello, IronPDF!</h1>";
        // Create a byte array to store the PDF content
        byte[] pdfBytes;
        // Convert HTML to PDF and pass the byte array by reference
        ConvertHtmlToPdf(pdf, htmlContent, out pdfBytes);
        // Save or process the PDF content
        // For demonstration, let's print the length of the PDF content
        Console.WriteLine("Length of PDF: " + pdfBytes.Length);
    }

    // Method that converts HTML content to PDF and stores it in a byte array by reference
    static void ConvertHtmlToPdf(IronPdf.HtmlToPdf pdfConverter, string htmlContent, out byte[] pdfBytes)
    {
        // Convert HTML to PDF and store the result in the byte array
        var pdfDoc = pdfConverter.RenderHtmlAsPdf(htmlContent);
        pdfBytes = pdfDoc.BinaryData;
    }
}
using IronPdf;
using System;

class Program
{
    static void Main(string[] args)
    {
        // Create a PDF document
        var pdf = new IronPdf.HtmlToPdf();
        // HTML content to be converted to PDF
        string htmlContent = "<h1>Hello, IronPDF!</h1>";
        // Create a byte array to store the PDF content
        byte[] pdfBytes;
        // Convert HTML to PDF and pass the byte array by reference
        ConvertHtmlToPdf(pdf, htmlContent, out pdfBytes);
        // Save or process the PDF content
        // For demonstration, let's print the length of the PDF content
        Console.WriteLine("Length of PDF: " + pdfBytes.Length);
    }

    // Method that converts HTML content to PDF and stores it in a byte array by reference
    static void ConvertHtmlToPdf(IronPdf.HtmlToPdf pdfConverter, string htmlContent, out byte[] pdfBytes)
    {
        // Convert HTML to PDF and store the result in the byte array
        var pdfDoc = pdfConverter.RenderHtmlAsPdf(htmlContent);
        pdfBytes = pdfDoc.BinaryData;
    }
}
Imports IronPdf
Imports System

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		' Create a PDF document
		Dim pdf = New IronPdf.HtmlToPdf()
		' HTML content to be converted to PDF
		Dim htmlContent As String = "<h1>Hello, IronPDF!</h1>"
		' Create a byte array to store the PDF content
		Dim pdfBytes() As Byte = Nothing
		' Convert HTML to PDF and pass the byte array by reference
		ConvertHtmlToPdf(pdf, htmlContent, pdfBytes)
		' Save or process the PDF content
		' For demonstration, let's print the length of the PDF content
		Console.WriteLine("Length of PDF: " & pdfBytes.Length)
	End Sub

	' Method that converts HTML content to PDF and stores it in a byte array by reference
	Private Shared Sub ConvertHtmlToPdf(ByVal pdfConverter As IronPdf.HtmlToPdf, ByVal htmlContent As String, ByRef pdfBytes() As Byte)
		' Convert HTML to PDF and store the result in the byte array
		Dim pdfDoc = pdfConverter.RenderHtmlAsPdf(htmlContent)
		pdfBytes = pdfDoc.BinaryData
	End Sub
End Class
$vbLabelText   $csharpLabel

A função ConvertHtmlToPdf neste exemplo recebe três parâmetros: conteúdo HTML, um array de bytes chamado pdfBytes e um objeto IronPDF HtmlToPdf. A palavra-chave out indica que o parâmetro pdfBytes é fornecido por referência e será alterado dentro do método.

Passagem por Referência em C# (Como Funciona para Desenvolvedores): Figura 5

O conteúdo HTML é renderizado como um documento PDF usando o IronPDF dentro da função ConvertHtmlToPdf, e os dados binários resultantes são armazenados na matriz pdfBytes.

Usamos novamente a conversão de HTML para PDF do IronPDF na função Main, passando o array pdfBytes por referência. Após a chamada do método, o conteúdo do PDF do IronPDF é armazenado no endereço de memória do array pdfBytes.

Passagem por Referência em C# (Como Funciona para Desenvolvedores): Figura 6

Este tutorial mostra como criar e trabalhar com documentos PDF de forma eficiente usando o IronPDF e passagem por referência em C#.

Conclusão

Em resumo, usar o IronPDF com passagem por referência em C# melhora significativamente os recursos de criação e modificação de documentos PDF em programas .NET . O uso eficaz das palavras-chave ref e out permite que os desenvolvedores transmitam argumentos por referência com facilidade, possibilitando a modificação de variáveis ​​e conteúdo dentro dos métodos de forma rápida e eficiente. A ampla gama de recursos do IronPDF, que inclui a capacidade de converter HTML em PDF, gerar PDFs com base em imagens e executar diversas tarefas de modificação de PDF, permite que os desenvolvedores criem facilmente documentos PDF dinâmicos e interativos.

O IronPDF oferece as ferramentas e APIs necessárias para agilizar os processos de processamento de documentos, incluindo divisão, fusão, anotação e otimização de arquivos PDF. Além disso, a interoperabilidade multiplataforma do IronPDF garante que aplicativos C# possam incorporar recursos de PDF com facilidade em diversos contextos. Essencialmente, os desenvolvedores podem criar novas maneiras de criar, modificar e exibir documentos PDF em seus aplicativos, combinando a robustez da passagem por referência do C# com o vasto conjunto de recursos do IronPDF.

Por fim, você poderá trabalhar de forma eficiente com o Excel, criar PDFs, realizar OCR e usar códigos de barras. O preço de cada biblioteca começa em $799 . Os desenvolvedores podem escolher o melhor modelo com confiança se houver opções de licenciamento claras e adaptadas às necessidades do projeto. Com essas vantagens, os desenvolvedores podem superar diversos desafios com eficiência e transparência.

Perguntas frequentes

Como posso converter HTML para PDF em C#?

Você pode usar o método RenderHtmlAsPdf do IronPDF para converter strings HTML em PDFs. Esse método permite transformar facilmente páginas da web ou conteúdo HTML em documentos PDF de alta qualidade, mantendo o layout e a formatação originais.

O que é passagem por referência em C#?

Em C#, "passar por referência" refere-se a um método de passar argumentos para funções ou métodos fornecendo uma referência à variável original em vez de uma cópia de seu valor. Isso permite que quaisquer alterações feitas no parâmetro dentro do método afetem a variável original.

Como usar as palavras-chave 'ref' e 'out' em C#?

Em C#, a palavra-chave 'ref' é usada para passar argumentos por referência, permitindo que modificações dentro do método afetem a variável original. A palavra-chave 'out' é semelhante, mas não exige que a variável seja inicializada previamente, permitindo que os métodos retornem múltiplos valores.

Quando você deve usar passagem por referência em C#?

A passagem por referência deve ser usada quando você precisa modificar várias variáveis, manipular estruturas de dados grandes para evitar cópias desnecessárias ou ao interagir com bibliotecas externas que exigem parâmetros de referência.

Como uma biblioteca de processamento de PDF pode utilizar a passagem por referência?

Uma biblioteca de processamento de PDF como o IronPDF pode utilizar a passagem por referência para armazenar dados de PDF em um array de bytes usando a palavra-chave 'out'. Isso permite o processamento e a modificação eficientes do conteúdo do PDF dentro de métodos, como a conversão de HTML para PDF e o armazenamento do resultado em um array de bytes.

Quais são as vantagens de usar uma biblioteca de processamento de PDF em .NET?

Uma biblioteca de processamento de PDF como o IronPDF oferece recursos como conversão de HTML para PDF, anotação de texto e imagem, segurança de PDF, preenchimento de formulários, compressão e otimização. É compatível com aplicativos .NET, aprimorando a funcionalidade e a compatibilidade entre plataformas.

Como instalar uma biblioteca de processamento de PDF em um projeto do Visual Studio?

Uma biblioteca de processamento de PDF pode ser instalada em um projeto do Visual Studio usando o Gerenciador de Pacotes NuGet. Use o comando apropriado no terminal de gerenciamento de pacotes ou pesquise a biblioteca na interface do Gerenciador de Pacotes NuGet.

O IronPDF pode ser usado com ASP.NET e .NET Core?

Sim, o IronPDF foi projetado para se integrar perfeitamente com aplicativos ASP.NET e .NET Core, permitindo que os desenvolvedores criem, modifiquem e renderizem documentos PDF em diversas plataformas.

Curtis Chau
Redator Técnico

Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais ...

Leia mais

Equipe de suporte de ferro

Estamos online 24 horas por dia, 5 dias por semana.
Bater papo
E-mail
Liga para mim