跳至頁尾內容
開發者更新

C# 參考傳遞 (對開發者如何運作)

有效的記憶體管理和資料操作是程式設計世界中構建高效能程式碼的基本組成部分。 編寫有效且無錯誤的程式碼需要了解如何在像C#這樣的語言中在方法和函式之間傳遞資料。 這個過程中一個至關重要的概念是"按引用傳遞"。我們將在這篇文章中探索 C# 中按引用傳遞的含義和適當的使用情形。

如何使用C#的按引用傳遞

  1. 定義一個帶有Ref參數的方法。
  2. 初始化一個變數。
  3. 使用Ref關鍵字調用方法。
  4. 在方法內修改變數。
  5. 觀察主方法中的變化。
  6. 定義另一個帶有Out參數的方法以生成PDF。
  7. 初始化並調用Out方法。

C#中的按引用傳遞是什麼?

使用引用來傳遞是指在C#中通過給調用方法的初始變數的引用來將參數傳遞給函式或方法的方式,而不是它值的副本。 這意味著在方法內對參數所做的任何更改都會影響到方法之外的初始變數。

在C#中,值型別變數(例如int、float、bool等)通常是按值提供的,這意味著方法接收的是變數值的副本。 然而,您可以通過使用ref關鍵字告訴編譯器按引用傳遞參數。

使用ref關鍵字

在C#中,可以通過使用ref關鍵字來按引用傳遞引用參數。 使用ref關鍵字按引用提供的參數所做的任何更改都會影響到原變數。

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

上面的例子中的x。 在方法內對參數num變數。

out關鍵字

ref類似,用於按引用將參數傳遞給調用方法。 因此,方法能夠返回多個值。

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

在此範例中,兩個整數參數Calculate方法。 該過程計算result參數。 由於out,故不需要在發送到方法之前初始化。

何時使用按引用傳遞

編寫高效且可維護的程式碼需要知道何時使用按引用傳遞。 以下情況需要使用按引用傳遞:

修改多個變數

當一個方法需要改變幾個變數並且這些變化需要在方法外反映時,按引用傳遞參數可能會很有幫助。 與其讓過程返回多個值,不如按引用傳遞變數並在方法內直接修改。

// 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

大資料結構

通過避免不必要的資料複製,按引用傳遞大資料結構(如陣列或複雜物件)可以提高效率。 不過,當處理大型資料結構時應小心使用按引用傳遞,因為如果處理不當,可能會帶來意想不到的後果。

與外部程式碼的互操作性

當與外部庫交互或整合本機程式碼時,可能需要按引用傳遞參數以符合方法定義和外部程式碼的要求。

IronPDF是什麼?

IronPDF允許程式設計師在.NET應用程式中建立、修改和渲染PDF文件。 它的強大功能集使得處理PDF文件變得簡單。 您可以從HTML、照片和其他格式建立PDF文件; 用文字、圖片和其他資料註釋PDF; 以及拆分、合併和編輯現有的PDF文件。

IronPDF的主要功能是將HTML轉換為PDF,以確保保留版面和樣式。 此功能非常適合從基於網頁的內容(如報告、發票和文件)生成PDF。 它將HTML文件、URL和HTML字串轉換為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

IronPDF的特性

文字和圖片註釋

IronPDF允許您以程式方式將文字、圖片和註釋新增到PDF文件中。 您可以利用此功能用簽名、章或備註來註釋PDF文件。

PDF安全性

IronPDF允許您指定不同的權限,包括列印、複製內容和編輯文件,並能以密碼加密PDF文件。 這有助於您控制對PDF文件的存取並保護敏感資料。

填寫互動式PDF表單

IronPDF允許您以程式方式填寫互動式PDF表單。 此功能對於使用者輸入建立自定義文件或自動化表單提交非常有幫助。

PDF壓縮和優化

IronPDF提供PDF文件的壓縮和優化解決方案,以在不減少質量的情況下減少文件大小。 這降低了PDF文件所需的儲存量,並提升了性能。

跨平台相容性

IronPDF旨在與為Windows、Linux和macOS等平台設計的.NET應用程式完美運行。 它與流行的.NET框架如ASP.NET、.NET Core和Xamarin整合。

建立一個新的Visual Studio專案

用Visual Studio建立一個控制台專案很簡單。 在Visual Studio中建立控制台應用程式請執行以下操作:

在開始Visual Studio開發之前,請確保您已經在您的電腦上安裝了它。

開始一個新專案

選擇文件,然後新建,最後專案。

C#按引用傳遞(對開發者來說是如何工作的):圖1

在"建立新專案"框的左側,選擇您喜歡的程式語言(例如C#)。

可以從以下專案模板列表中選擇"控制台應用程式"或"控制台應用程式(.NET Core)"模板。

在"名稱"欄位中為您的專案提供一個名稱。

C#按引用傳遞(對開發者來說是如何工作的):圖2

選擇您要儲存專案的儲存位置。

按"建立"以啟動控制台應用程式專案。

C#按引用傳遞(對開發者來說是如何工作的):圖3

安裝IronPDF

在Visual Studio工具中的工具下,您可以找到Visual命令列介面。 選擇NuGet的套件管理器。 在套件管理終端標籤上,您必須鍵入以下命令。

Install-Package IronPdf

另一種選擇是使用包管理器。 可以使用NuGet套件管理器選項直接將套件安裝到解決方案中。 使用NuGet網站上的搜索框定位套件。 以下範例截圖說明了如何在包管理器中輕鬆查找"IronPDF":

C#按引用傳遞(對開發者來說是如何工作的):圖4 - 從NuGet套件管理器安裝IronPDF

相關搜索結果的列表可以在上圖中看到。 請調整這些設置以啟用軟體在您的計算機上的安裝。

一旦套件下載並安裝,就可以在當前專案中使用它了。

使用IronPDF的按引用傳遞

這是如何使用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

此例子中的pdfBytes的位元組陣列和一個IronPDF HtmlToPdf物件。 關鍵字pdfBytes參數是按引用提供的,並且會在方法中進行更改。

C#按引用傳遞(對開發者來說是如何工作的):圖5

pdfBytes陣列中。

我們在主函式中再次使用IronPDF HTML到PDF轉換,按引用傳遞pdfBytes陣列。 方法調用後,IronPDF的PDF內容將儲存在pdfBytes陣列的記憶體位置中。

C#按引用傳遞(對開發者來說是如何工作的):圖6

這向您展示了如何在C#中使用IronPDF和按引用傳遞高效地建立和處理PDF文件。

結論

總之,將IronPDF與C#中的按引用傳遞相結合大大提升了在.NET程式中建立和修改PDF文件的能力。 有效使用out關鍵字使開發者能夠輕鬆通過引用傳遞參數,從而能夠在方法中快速高效地修改變數和內容。 IronPDF豐富的功能集,包括將HTML轉換為PDF、基於影像生成PDF以及執行廣泛的PDF修改任務,讓開發者能夠輕鬆構建動態和交互式的PDF文件。

IronPDF提供加速文件處理過程所需的工具和API,包括拆分、合併、註釋和優化PDF文件。 另外,IronPDF的跨平台互操作性保證了C#應用程式能夠在各種環境中輕鬆結合PDF功能。 基本上,開發者可以通過將C#的按引用傳遞和IronPDF豐富的功能集相結合,為他們的應用程式建立、修改和顯示PDF文件創造新的途徑。

最後,您可以高效地使用Excel、生成PDF、進行OCR和使用條碼。 每個程式庫的定價開始於$999。 如果有明確的授權選項正好適應項目的需求,開發人員可以自信地選擇最佳模式。 有了這些優勢,開發者能夠以高效和透明的方式應對各種挑戰。

常見問題

我如何在C#中將HTML轉換為PDF?

您可以使用IronPDF的RenderHtmlAsPdf方法將HTML字串轉換為PDF。此方法能夠輕鬆將網頁或HTML內容轉換為高質量的PDF文件,並保持原有的佈局和格式。

什麼是C#中的引用傳遞?

C#中的引用傳遞是指通過提供原始變數的引用,而不是其值的副本,將參數傳遞給函式或方法。這使得在方法內進行的任何更改都會影響原始變數。

您如何在C#中使用'ref'和'out'關鍵字?

在C#中,'ref'關鍵字用於通過引用傳遞參數,允許在方法內的修改影響原始變數。'out'關鍵字類似,但不要求變數提前初始化,使得方法可以返回多個值。

什麼時候應該在C#中使用引用傳遞?

當您需要修改多個變數、處理大型資料結構以避免不必要的複製,或是與需要引用參數的外部庫交互時,應該使用引用傳遞。

PDF處理庫如何利用引用傳遞?

像IronPDF這樣的PDF處理庫可以利用引用傳遞,通過使用'out'關鍵字將PDF資料儲存在位元組陣列中。這允許在方法內有效地處理和修改PDF內容,例如將HTML轉換為PDF並將結果儲存在位元組陣列中。

使用.NET的PDF處理庫有什麼優勢?

像IronPDF這樣的PDF處理庫提供HTML到PDF轉換、文字和圖像註釋、PDF安全、表單填寫、壓縮和優化特性。它與.NET應用程式相容,增強了功能性和跨平台相容性。

如何在Visual Studio專案中安裝PDF處理庫?

您可以使用NuGet封裝管理器在Visual Studio專案中安裝PDF處理庫。使用適當的指令在封裝管理終端或在NuGet封裝管理器介面中搜尋該庫。

IronPDF可以用於ASP.NET和.NET Core嗎?

是的,IronPDF旨在無縫整合於ASP.NET和.NET Core應用程式,允許開發者跨多個平台建立、修改和渲染PDF文件。

Jacob Mellor,首席技術官 @ Team Iron
首席技術官

Jacob Mellor是Iron Software的首席技術官,一位在C# PDF技術上開創先河的遠見工程師。作為Iron Software核心程式碼庫的原開發者,他從創立以來就一直在塑造公司的產品架構,與首席執行官Cameron Rimington一起將公司轉變為服務於NASA、特斯拉和全球政府公司的50多名人員的公司。

Jacob擁有曼徹斯特大學的土木工程一等榮譽學士學位(BEng),於1998-2001年之間獲得。在1999年於倫敦創辦他的第一家軟體公司並於2005年建立了他的第一批.NET元組件後,他專注於解決Microsoft生態系統中的複雜問題。

他的旗艦IronPDF和Iron Suite .NET程式庫在全球獲得了超過3000萬次NuGet安裝依據,他的基礎程式碼基繼續支援著世界各地開發者使用的工具。擁有25年的商業經驗和41年的程式設計專業知識,他仍專注於推動企業級C#、Java和Python PDF技術的創新,同時指導下一代技術領導者。

Iron 支援團隊

我們線上24小時,每週5天。
聊天
電子郵件
給我打電話