.NET幫助 C#傳遞參考(對開發者如何理解的工作) Curtis Chau 更新日期:6月 22, 2025 Download IronPDF NuGet 下載 DLL 下載 Windows 安裝程式 Start Free Trial Copy for LLMs Copy for LLMs Copy page as Markdown for LLMs Open in ChatGPT Ask ChatGPT about this page Open in Gemini Ask Gemini about this page Open in Grok Ask Grok about this page Open in Perplexity Ask Perplexity about this page Share Share on Facebook Share on X (Twitter) Share on LinkedIn Copy URL Email article 有效的記憶體管理和數據操作是程式設計領域中構建高性能代碼的基本組件。 編寫有效且無錯誤的代碼需要了解 C# 這樣的語言中方法和函數之間的數據傳輸方式。 該過程中至關重要的一個想法是"按引用傳遞"。我們將在本文中探討 C# 中按引用傳遞的含義及合適的使用情境。 如何使用 C# 的按引用傳遞 定義帶有 Ref 參數的方法。 初始化變量。 使用 Ref 關鍵字調用方法。 在方法內修改變量。 觀察主方法中的變化。 定義另一個帶有 Out 參數的方法來生成 PDF。 初始化並調用 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 上面的示例中,ModifyByRef方法使用ref關鍵字以引用方式接受整數參數x。 方法被用ref num調用時,對方法內的 ref 參數x的任何更改將立即影響方法外的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 在此示例中,兩個整數參數x和y以及一個由out關鍵字標識的額外參數result被傳遞給Calculate方法。 在過程計算出x和y的和後,結果被賦值給result參數。 因為它標記為out,所以在發送給方法前result不需要初始化。 何時使用按引用傳遞 寫高效和可維護的代碼需要知道什麼時候使用按引用傳遞。 以下情況需要使用按引用傳遞: 修改多個變量 當一個方法需要更改多個變量並且那些更改需要在方法外反映時,按引用傳遞參數可能是有幫助的。 而不是讓方法返回多個值,變量可以被按引用傳遞,並在方法內直接更改。 // 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 文件、網址和 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#)。 可以從以下項目模板列表中選擇"控制台應用程序"或"控制台應用程序(.NET Core)」模板。 在"名稱"字段中為項目提供一個名字。 選擇要儲存項目的位置。 按"創建"以啟動控制台應用程序項目。 安裝 IronPDF 在 Visual Studio 的工具中,您可以找到 Visual 的命令行介面。 選擇 NuGet 的包管理器。 在包管理終端標籤上,您必須鍵入以下命令。 Install-Package IronPdf 另一個選擇是使用包管理器。 使用 NuGet 包管理器選項可以直接將包安裝到解決方案中。 在 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 在此示例中,ConvertHtmlToPdf函數接收三個參數:HTML 內容、一個名為pdfBytes的字節數組和一個 IronPDF 的HtmlToPdf對象。 out關鍵字表示pdfBytes參數是按引用提供的,並將在方法內被修改。 在ConvertHtmlToPdf函數內使用 IronPDF 將 HTML 內容渲染為 PDF 文檔,產生的二進制數據被存儲在pdfBytes數組中。 在主函數中,我們再次使用 IronPDF 的 HTML 到 PDF 轉換功能,通過引用傳遞 pdfBytes 數組。 方法調用後,IronPDF 的 PDF 內容被存儲在pdfBytes數組的內存位置中。 這向您展示了如何使用 IronPDF 和 C# 中的按引用傳遞高效地創建和處理 PDF 文件。 結論 總之,將 C# 的按引用傳遞與 IronPDF 結合使用,大大提高了在 .NET 程式中創建和修改 PDF 文件的能力。 有效使用ref和out關鍵字使開發人員能夠輕鬆地按引用傳遞參數,讓在方法內快速高效地修改變量和內容成為可能。 IronPDF 的各種功能,如將 HTML 轉換為 PDF、根據圖像生成 PDF 以及執行廣泛的 PDF 修改任務,使開發人員能夠輕鬆構建動態和交互式 PDF 文件。 IronPDF 提供了所需的工具和 API,以加速文檔處理進程,包括拆分、合併、註釋和優化 PDF 文件。 此外,IronPDF 的跨平台互操作性保證了 C# 應用程式能夠在各種環境中輕鬆地整合 PDF 功能。 本質上,通過將 C# 的按引用傳遞的強大功能與 IronPDF 的豐富功能集結合,開發人員可以在其應用程式中開創創建、修改和顯示 PDF 文件的新途徑。 最後,您可以高效地操作 Excel、創建 PDF、執行 OCR 並使用條碼。 每個庫的價格從$799開始。 如果有明確的許可選項針對項目的需求進行量身訂製,開發人員可以有信心地選擇最佳模式。 有了這些優勢,開發人員可以高效、透明地完成各種挑戰。 常見問題解答 怎樣在 C# 中將 HTML 轉換為 PDF? 您可以使用 IronPDF 的 RenderHtmlAsPdf 方法将 HTML 字符串转换为 PDF。此方法允许您轻松将网页或 HTML 内容转换为高质量的 PDF 文档,保持原始布局和格式。 什么是 C# 中的引用传递(pass by reference)? 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 文档。 Curtis Chau 立即與工程團隊聊天 技術作家 Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。 相關文章 更新日期 9月 4, 2025 RandomNumberGenerator C# 使用RandomNumberGenerator C#類可以幫助將您的PDF生成和編輯項目提升至新水準 閱讀更多 更新日期 9月 4, 2025 C#字符串等於(它如何對開發者起作用) 當結合使用強大的PDF庫IronPDF時,開關模式匹配可以讓您構建更智能、更清晰的邏輯來進行文檔處理 閱讀更多 更新日期 8月 5, 2025 C#開關模式匹配(對開發者來說是如何工作的) 當結合使用強大的PDF庫IronPDF時,開關模式匹配可以讓您構建更智能、更清晰的邏輯來進行文檔處理 閱讀更多 NServiceBus C#(對開發者如何理解的工作)EasyNetQ .NET(對開發者如何...