跳過到頁腳內容
.NET幫助

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

有效的記憶體管理和資料處理是程式設計領域中建立高效能程式碼的必要元件。 撰寫有效且無錯誤的程式碼,需要瞭解資料如何在 C# 等語言的方法和函式之間 傳輸。 對於這個程序而言,有一個想法至關重要,那就是 "pass by reference"。我們將在本篇文章中探討 C# 中的參照傳遞 (pass-by-reference) 的意義,以及適當的使用情境。

如何使用 C# Pass by Reference

1.使用 Ref 參數定義一個方法。 2.初始化變數。 3.使用 Ref 關鍵字呼叫方法。 4.修改方法內部的變數。 5.觀察主要方法的變更。 6.定義帶 Out 參數的另一個方法來產生 PDF。 7.初始化並呼叫 Out 方法。

What is Pass by Reference in C#?

利用參照傳送是指 C# 中透過提供被呼叫方法的初始變數的參照,而非其值的複本,來傳送參數給函數或方法的方式。 這意味著在方法內部對參數所做的任何變更,也會對方法外部的初始變數造成影響。

C# 中的值型變數(如 int、float、bool 等)通常由 value 提供,這表示方法會收到變數值的副本。 儘管如此,您可以使用 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

上面範例中的 ModifyByRef 方法使用 ref 關鍵字,以參照方式取得整數參數 x 。 在方法內部對 ref 參數 x 所做的任何修改,都會在使用 ref num 來呼叫方法時,立即影響方法外部的 num 變數。

out關鍵字

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

在此示例中,兩個整數參數 xy 以及一個由 out 關鍵字表示的額外參數 result 被傳送到 Calculate 方法。 在程序計算 xy 的總和之後,會將結果指定給 result 參數。 result 在傳送到方法之前不需要初始化,因為它被標記為 out

何時使用引用傳遞

要寫出有效率且可維護的程式碼,就必須知道何時該使用旁徵博引 (pass-by-reference)。 以下情況需要使用逐字參考:

修改多個變數

當一個方法需要變更數個變數,而這些變更需要反映在方法之外時,以參照方式傳遞參數可能會有所幫助。 變數可以透過參照傳送,並直接在方法中變更,而不是讓程序傳回多個值。

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

大型資料結構

透過參考方式傳遞大型資料結構 (例如陣列或複雜物件),可避免不必要的資料重複,進而提升效率。 不過,在處理大型資料結構時,應謹慎使用 Pass-by-reference,因為如果處理不當,可能會產生意想不到的後果。

與外部程式碼的互通性

在與外部程式庫互動或整合本機程式碼時,可能需要以參照方式傳送參數,以便同時遵守方法定義和外部程式碼的要求。

什麼是 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 應用程式中完美運作。 ASP.NET、.NET Core 和 Xamarin 等熱門 .NET Framework 均與之整合。

建立新的 Visual Studio 專案

使用 Visual Studio 很容易建立控制台專案。 若要建立控制台應用程式,請在 Visual Studio 中執行下列動作:

在開始Visual Studio Development之前,請確定您已在電腦上安裝。

開始新專案

選擇"檔案",然後選擇"新增",最後選擇"專案"。

C# Pass by Reference (How It Works For Developers):圖 1

在"建立新專案"方塊的左側,選擇您偏好的程式語言 (例如 C#)。

Console App"或"Console App (.NET Core)"範本可從下列專案範本清單中選擇。

在"名稱"欄位中提供專案名稱。

C# Pass by Reference (How It Works For Developers):圖 2

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

按下"建立"以啟動 Console 應用程式專案。

C# Pass by Reference (How It Works For Developers):圖 3

安裝 IronPDF。

在 Visual Studio Tools 的 Tools 下,您可以找到 Visual Command-Line 介面。 選擇 NuGet 的套件管理員。 在套件管理終端標籤上,您必須鍵入下列指令。

Install-Package IronPdf

另一個選擇是使用套件管理員。 使用 NuGet Package Manager 選項可將套件直接安裝到解決方案中。 使用 NuGet 網站上的搜尋方塊來尋找套件。 以下範例截圖說明在套件管理員中尋找"IronPDF"有多容易:

C# Pass by Reference (How It Works For Developers):圖 4 - 從 NuGet 套件管理員安裝 IronPDF

相關搜尋結果清單可見上圖。 若要在您的電腦上安裝軟體,請調整這些設定。

下載並安裝套件後,即可在目前的專案中使用。

使用 IronPDF 的參考傳遞。

這是如何使用 IronPDF 的 pass-by-reference 功能的說明。

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

本範例中的 ConvertHtmlToPdf 函式需要三個參數:HTML 內容、稱為 pdfBytes 的位元組陣列,以及 IronPDF HtmlToPdf 物件。 out 關鍵字表示 pdfBytes 參數是以引用方式提供,並將在方法中變更。

C# Pass by Reference (How It Works For Developers):圖 5

ConvertHtmlToPdf 函式中使用 IronPDF 將 HTML 內容渲染為 PDF 文件,並將結果的二進位資料儲存在 pdfBytes 陣列中。

我們在 Main 函式中再次使用 IronPDF HTML 至 PDF 轉換,透過參照傳送 pdfBytes 陣列。 在方法呼叫之後,IronPDF 的 PDF 內容會儲存在 pdfBytes 陣列的記憶體位置。

C# Pass by Reference (How It Works For Developers):圖 6

向您展示如何使用 IronPDF 和 C# 中的 pass-by-reference 高效地創建和處理 PDF 文檔。

結論

總而言之,在 C# 中使用 IronPDF 與 pass-by-reference 可以大幅提升在 .NET 程式中建立與修改 PDF 文件的能力。 有效使用 refout 關鍵字,可讓開發人員輕鬆地透過參照傳輸參數,從而快速有效地修改方法中的變數和內容。 IronPDF 的功能非常廣泛,其中包括將 HTML 轉換為 PDF、根據圖像生成 PDF 以及執行廣泛的 PDF 修改任務,這些功能使開發人員能夠輕易地構建動態且互動的 PDF 文件。

IronPDF 提供加快文件處理流程所需的工具和 API,包括分割、合併、註解和優化 PDF 檔案。 此外,IronPDF 的跨平台互操作性可確保 C# 應用程式能在各種設定中輕鬆整合 PDF 功能。 基本上,開發人員可以透過融合 C# 的 pass-by-reference 優勢與 IronPDF 的豐富功能集,在應用程式中建立、修改和顯示 PDF 文件的新途徑。

最後,您可以有效率地使用 Excel、製作 PDF、執行 OCR 和使用 BarCode。 每個函式庫的起價為 $799. 如果有針對專案需求的明確授權選項,開發人員就可以放心選擇最佳模式。 憑藉這些優勢,開發人員可以有效率且透明地克服各種挑戰。

常見問題解答

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

您可以使用 IronPDF 的 RenderHtmlAsPdf 方法將 HTML 字串轉換為 PDF。此方法可讓您輕鬆地將網頁或 HTML 內容轉換為高品質的 PDF 文件,並保持原始的排版與格式。

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

C# 中的參照傳遞是指透過提供原始變數的參照而非其值的複本,將參數傳遞至函數或方法的方法。這允許在方法內對參數所做的任何變更都會影響原始變數。

如何在 C# 中使用「ref」和「out」關鍵字?

在 C# 中,'ref' 關鍵字用來以參照方式傳遞參數,允許方法中的修改影響原始變數。out "關鍵字與此類似,但不需要事先初始化變數,因此方法可以傳回多個值。

何時應該在 C# 中使用參考傳遞?

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

PDF 處理函式庫如何利用參考傳遞?

IronPDF 之類的 PDF 處理函式庫可以利用參考傳遞 (pass by reference),使用「out」關鍵字將 PDF 資料儲存在位元組陣列中。這允許在方法中有效率地處理和修改 PDF 內容,例如將 HTML 轉換為 PDF 並將結果儲存於位元組陣列中。

在 .NET 中使用 PDF 處理函式庫有哪些優點?

IronPDF 之類的 PDF 處理函式庫提供 HTML 至 PDF 轉換、文字與影像註解、PDF 安全性、表格填寫、壓縮與最佳化等功能。它與 .NET 應用程式相容,增強了功能性和跨平台相容性。

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

PDF 處理函式庫可使用 NuGet 套件管理員安裝在 Visual Studio 專案中。在套件管理終端中使用適當的指令,或在 NuGet Package Manager 介面中搜尋該函式庫。

IronPDF 可以與 ASP.NET 和 .NET Core 搭配使用嗎?

是的,IronPDF 旨在與 ASP.NET 和 .NET Core 應用程式無縫整合,讓開發人員可以在各種平台上建立、修改和渲染 PDF 文件。

Jacob Mellor, Team Iron 首席技术官
首席技术官

Jacob Mellor 是 Iron Software 的首席技術官,作為 C# PDF 技術的先鋒工程師。作為 Iron Software 核心代碼的原作者,他自開始以來塑造了公司產品架構,與 CEO Cameron Rimington 一起將其轉變為一家擁有超過 50 名員工的公司,為 NASA、特斯拉 和 全世界政府機構服務。

Jacob 持有曼徹斯特大學土木工程一級榮譽学士工程學位(BEng) (1998-2001)。他於 1999 年在倫敦開設了他的第一家軟件公司,並於 2005 年製作了他的首個 .NET 組件,專注於解決 Microsoft 生態系統內的複雜問題。

他的旗艦產品 IronPDF & Iron Suite .NET 庫在全球 NuGet 被安裝超過 3000 萬次,其基礎代碼繼續為世界各地的開發工具提供動力。擁有 25 年的商業經驗和 41 年的編碼專業知識,Jacob 仍專注於推動企業級 C#、Java 及 Python PDF 技術的創新,同時指導新一代技術領袖。