.NET 幫助

C# 參考(這對開發人員的工作方式)

發佈 2024年4月29日
分享:

在 C# 中,ref 關鍵字是一個強大的功能,允許方法修改傳遞的參考類型變數的參數值。 理解如何使用 ref 可以增強您在應用程式中管理和操作資料的能力。

本文將引導您了解 ref 關鍵字的基本知識、其應用以及在不同數據類型中使用它的細微差別。我們還將學習有關IronPDF 程式庫 for .NET這是一個PDF庫。

了解 ref 參數

ref 參數是一種方法參數,用作對傳入方法的變數的參考。 與只傳遞變數副本的標準值參數不同,ref 參數允許被調用的方法修改原始變數的值。 當您需要一種方法來更新傳遞給它的變數狀態時,這種行為是至關重要的。

請考慮以下範例以演示 ref 的基本用法,重點在於如何使 參考型別變數 在方法調用過程中始終保留其參數值於同一個對象中:

class Program
{
    static void Main()
    {
        int number = 100;
        ModifyNumber(ref number);
        Console.WriteLine(number);
    }
    static void ModifyNumber(ref int number)
    {
        number = 200;
    }
}
class Program
{
    static void Main()
    {
        int number = 100;
        ModifyNumber(ref number);
        Console.WriteLine(number);
    }
    static void ModifyNumber(ref int number)
    {
        number = 200;
    }
}
Friend Class Program
	Shared Sub Main()
		Dim number As Integer = 100
		ModifyNumber(number)
		Console.WriteLine(number)
	End Sub
	Private Shared Sub ModifyNumber(ByRef number As Integer)
		number = 200
	End Sub
End Class
VB   C#

在此範例中,Main 方法宣告了一個整數 number 並將其初始化為 100。然後,它呼叫 ModifyNumber,將 number 作為 ref 參數傳遞。 在 ModifyNumber 中,number 的值被更改為 200。由於 number 是以引用方式傳遞,因此更改反映在 Main 方法中的原始值中,並將 200 輸出到控制台。

ref 參數如何運作

當你使用 ref 關鍵字宣告方法參數時,你是在告訴編譯器該參數將引用原始變數而不是其副本。 這是透過傳遞變數的記憶體位址,而不是實際值來實現的。 被調用的方法和調用的方法都訪問相同的記憶體位置,這意味著對參數所做的任何更改都會直接影響到原始變數。

理解 ref 的關鍵在於認識到它可以用於值類型和參考類型。值類型包括像整數和結構這樣的簡單數據類型,而參考類型包括對象和數組。 然而,即使引用類型變數天生儲存記憶體地址,使用ref與引用類型一起使用時,允許你修改實際的引用,而不僅僅是對象的內容。

ref 和 out 之間的差異

雖然 refout 關鍵字都允許修改原始變數,但它們之間存在重要區別。 out 參數在傳遞給方法之前不需要初始化。 相反地,ref 參數要求在傳遞之前對變數進行初始化。 此外,使用 out 參數的方法必須在方法返回之前賦值。 此要求不適用於 ref 參數。

以下是您如何使用 out 關鍵字的方式:

class Program
{
    static void Main()
    {
        int result;
        CalculateResult(out result);
        Console.WriteLine(result);
    }
    static void CalculateResult(out int calculation)
    {
        calculation = 20 * 5;
    }
}
class Program
{
    static void Main()
    {
        int result;
        CalculateResult(out result);
        Console.WriteLine(result);
    }
    static void CalculateResult(out int calculation)
    {
        calculation = 20 * 5;
    }
}
Friend Class Program
	Shared Sub Main()
		Dim result As Integer = Nothing
		CalculateResult(result)
		Console.WriteLine(result)
	End Sub
	Private Shared Sub CalculateResult(ByRef calculation As Integer)
		calculation = 20 * 5
	End Sub
End Class
VB   C#

在此情況下,CalculateResult 初始化方法中的 calculation,而 Main 反映結果。

ref 在方法重載中的實際應用

ref 也可以用於方法重載,透過 ref 關鍵字改變方法簽章。 方法簽名由方法名稱及其參數類型組成,包括參數是否以參考方式傳遞。(參考)、按值或作為 out 參數。

考慮根據 ref 和值參數重載方法:

class Program
{
    static void Main()
    {
        int normalParameter = 10, refParameter = 10;
        IncrementValue(normalParameter);
        IncrementValue(ref refParameter);
        Console.WriteLine($"Normal: {normalParameter}, Ref: {refParameter}");
    }
    static void IncrementValue(int number)
    {
        number++;
    }
    static void IncrementValue(ref int number)
    {
        number++;
    }
}
class Program
{
    static void Main()
    {
        int normalParameter = 10, refParameter = 10;
        IncrementValue(normalParameter);
        IncrementValue(ref refParameter);
        Console.WriteLine($"Normal: {normalParameter}, Ref: {refParameter}");
    }
    static void IncrementValue(int number)
    {
        number++;
    }
    static void IncrementValue(ref int number)
    {
        number++;
    }
}
Friend Class Program
	Shared Sub Main()
		Dim normalParameter As Integer = 10, refParameter As Integer = 10
		IncrementValue(normalParameter)
		IncrementValue(refParameter)
		Console.WriteLine($"Normal: {normalParameter}, Ref: {refParameter}")
	End Sub
'INSTANT VB TODO TASK: VB does not allow method overloads which differ only in parameter ByVal/ByRef:
'ORIGINAL LINE: static void IncrementValue(int number)
	Private Shared Sub IncrementValue(ByVal number As Integer)
		number += 1
	End Sub
'INSTANT VB TODO TASK: VB does not allow method overloads which differ only in parameter ByVal/ByRef:
'ORIGINAL LINE: static void IncrementValue(ref int number)
	Private Shared Sub IncrementValue(ByRef number As Integer)
		number += 1
	End Sub
End Class
VB   C#

在這裡,IncrementValue 被重載,其中一個版本接受普通參數,另一個版本接受 ref 參數。 ref 版本會遞增原始變數,而普通版本只會改變一個副本。

IronPDF 介紹

C# 參考(開發者如何使用):圖 1

IronPDF for .NET PDF 解決方案是一個專為處理 PDF 文件設計的全方位 .NET 程式庫。 它主要以 C# 開發,專注於簡化創建和操作從 HTML 內容生成 PDF 文件. 透過使用Chrome Rendering Engine,IronPDF提供高品質、像素完美的PDF文件,能夠捕捉HTML、CSS、JavaScript和圖像內容的細微差別。

該程式庫用途廣泛,支援包括 .NET Framework、.NET Core 和 .NET Standard 在內的多種 .NET 環境,這使其適用於從桌面到基於網絡的各種應用。 IronPDF不僅支持PDF創建,還提供編輯、安全保護和將PDF轉換為其他格式的功能。

此功能涵蓋提取文字和圖像、填寫表單,甚至應用數位簽章,確保在.NET應用程式中全面處理PDF文件。

將IronPDF與C#和ref關鍵字整合

IronPDF 可以與 C# 整合,以利用該語言的強大功能,包括使用 ref 關鍵字以參考方式傳遞參數。 此整合允許動態 PDF 生成,其中內容可能取決於在運行時確定的變量值。

為了說明使用 ref 關鍵字將 IronPDF 與 C# 集成,考慮這樣一個情境:我們想要生成一個包含動態計算值的 PDF 報告。 此值將在一個接受 ref 參數的方法中計算,允許該方法修改此值,然後將其反映在生成的 PDF 中。

程式碼範例:使用 ref 生成動態內容的 PDF

以下 C# 代碼演示了如何結合使用 IronPDF 和 ref 關鍵字來生成 PDF 文檔。 程式碼計算一個值,並通過接受 ref 參數的方法修改該值,然後使用 IronPDF 生成包含此動態內容的 PDF。

using IronPdf;
using System;
class Program
{
    static void Main(string [] args)
    {
        License.LicenseKey = "License-Key";
        // Initialize the value
        int totalSales = 150;
        // Modify the value within the method using 'ref'
        AddMonthlyBonus(ref totalSales);
        // Use IronPDF to generate a PDF report
        var Renderer = new ChromePdfRenderer();
        var PDF = Renderer.RenderHtmlAsPdf($"<h1>Monthly Sales Report</h1><p>Total Sales, including bonus: {totalSales}</p>");
        // Save the PDF to a file
        PDF.SaveAs("MonthlySalesReport.pdf");
        // Confirm the PDF has been generated
        Console.WriteLine("PDF generated successfully. Check your project directory.");
    }
    static void AddMonthlyBonus(ref int sales)
    {
        // Assume a bonus of 10% of the sales
        sales += (int)(sales * 0.1);
    }
}
using IronPdf;
using System;
class Program
{
    static void Main(string [] args)
    {
        License.LicenseKey = "License-Key";
        // Initialize the value
        int totalSales = 150;
        // Modify the value within the method using 'ref'
        AddMonthlyBonus(ref totalSales);
        // Use IronPDF to generate a PDF report
        var Renderer = new ChromePdfRenderer();
        var PDF = Renderer.RenderHtmlAsPdf($"<h1>Monthly Sales Report</h1><p>Total Sales, including bonus: {totalSales}</p>");
        // Save the PDF to a file
        PDF.SaveAs("MonthlySalesReport.pdf");
        // Confirm the PDF has been generated
        Console.WriteLine("PDF generated successfully. Check your project directory.");
    }
    static void AddMonthlyBonus(ref int sales)
    {
        // Assume a bonus of 10% of the sales
        sales += (int)(sales * 0.1);
    }
}
Imports IronPdf
Imports System
Friend Class Program
	Shared Sub Main(ByVal args() As String)
		License.LicenseKey = "License-Key"
		' Initialize the value
		Dim totalSales As Integer = 150
		' Modify the value within the method using 'ref'
		AddMonthlyBonus(totalSales)
		' Use IronPDF to generate a PDF report
		Dim Renderer = New ChromePdfRenderer()
		Dim PDF = Renderer.RenderHtmlAsPdf($"<h1>Monthly Sales Report</h1><p>Total Sales, including bonus: {totalSales}</p>")
		' Save the PDF to a file
		PDF.SaveAs("MonthlySalesReport.pdf")
		' Confirm the PDF has been generated
		Console.WriteLine("PDF generated successfully. Check your project directory.")
	End Sub
	Private Shared Sub AddMonthlyBonus(ByRef sales As Integer)
		' Assume a bonus of 10% of the sales
		sales += CInt(Math.Truncate(sales * 0.1))
	End Sub
End Class
VB   C#

C# Ref(開發人員的運作方式):圖 2

在此範例中,totalSales 從 150 開始。AddMonthlyBonus 方法使用 ref 關鍵字通過參考傳遞此值,計算 10% 的獎金,並將其添加到原始銷售值中。 IronPDF 然後生成一個 PDF 文件,其中包含報告總銷售額的 HTML 片段,包括獎金。 最終文件以「MonthlySalesReport.pdf」名稱保存在本地。

結論

C# 參考(如何適用於開發人員):圖 3

理解 C# 中的 ref 關鍵字為管理數據在方法之間的傳遞提供了寶貴的工具。 通過允許方法直接修改傳遞給它們的參數的原始值,ref 可以讓您的方法更加靈活和強大。

隨著您對 ref 的經驗累積,您將更好地理解何時以及如何有效地使用它以滿足您的程式設計需求。 IronPDF 提供一個免費試用以開始使用 PDF 功能價格起始於 $749。

< 上一頁
MS Graph .NET(它對開發人員的運作方式)
下一個 >
Mudblazor .NET 8(開發人員如何運作)

準備開始了嗎? 版本: 2024.12 剛剛發布

免費 NuGet 下載 總下載次數: 11,622,374 查看許可證 >