跳至頁尾內容
.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
    }
}
$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
    }
}
$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
}
$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");
    }
}
$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;
    }
}
$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 處理庫可以利用引用傳遞,透過 `out` 關鍵字將 PDF 資料儲存在位元組數組中。這使得在方法內部有效率地處理和修改 PDF 內容成為可能,例如將 HTML 轉換為 PDF 並將結果儲存在位元組數組中。

在.NET中使用PDF處理庫有哪些優勢?

IronPDF 等 PDF 處理庫提供 HTML 轉 PDF、文字和圖像註釋、PDF 安全性、表單填入、壓縮和最佳化等功能。它與 .NET 應用程式相容,增強了功能性和跨平台相容性。

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

可以使用 NuGet 套件管理器將 PDF 處理庫安裝到 Visual Studio 專案中。在套件管理終端機中使用對應的命令,或在 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 一起將其發展成為一家擁有 50 多名員工、服務於 NASA、特斯拉和全球政府機構的公司。

Jacob 於 1998 年至 2001 年在曼徹斯特大學獲得土木工程一級榮譽學士學位。 1999 年,他在倫敦創辦了自己的第一家軟體公司;2005 年,他創建了自己的第一個 .NET 元件。此後,他專注於解決微軟生態系統中的複雜問題。

他的旗艦產品 IronPDF 和 IronSuite .NET 庫在全球 NuGet 上的安裝量已超過 3000 萬次,其基礎程式碼持續為全球開發者工具提供支援。憑藉 25 年的商業經驗和 41 年的程式設計專長,Jacob 始終致力於推動企業級 C#、Java 和 Python PDF 技術的創新,同時指導下一代技術領導者。