跳過到頁腳內容
.NET幫助

C# 記錄(對於開發者的運行原理)

C# record 是一個強大的功能,旨在簡化不可變數據模型的創建,並通過減少樣板代碼來增強編碼體驗。 本教程旨在簡化 C# 中記錄的概念,為初學者介紹其語法、用法和優勢。

無論您是在處理數據傳輸對象、配置,還是僅僅需要一種高效的方式來表示數據,C# 記錄都提供了一種簡潔且開發人員友好的方法。 我們還將在文章後面討論 IronPDF

什麼是 C# 記錄?

C# 中的記錄是一種引用類型,它簡化了定義不可變數據模型的語法。 與傳統的類定義不同,記錄強調基於值的相等性而不是引用相等性。 這意味著如果兩個記錄實例的屬性值相同,它們就被視為相等,而不僅僅是因為它們引用了內存中相同的對象位置。

記錄類型:類和結構

在 C# 中有兩種主要的記錄類型:

  • 記錄類:默認的記錄類型,是一種引用類型。
  • 記錄結構:為需要值類型的場景引入,這些默認是不可變的,並提供與記錄類相似的基於值的比較。

記錄聲明

聲明一個記錄很簡單。 您可以使用 record 關鍵字定義一個記錄,後跟類型(類或結構)和記錄的名稱。 例如,一個簡單的人員記錄可以聲明為:

public record class Person(string FirstName, string LastName);
public record class Person(string FirstName, string LastName);
'INSTANT VB TODO TASK: C# 'records' are not converted by Instant VB:
'public record class Person(string FirstName, string LastName)
$vbLabelText   $csharpLabel

此聲明包括 FirstNameLastName 的位置參數,這些在底層生成公共屬性和主構造函數。

記錄的不可變性

記錄設計為不可變,意味著一旦創建記錄實例,其屬性值就無法更改。 這種不可變性對於創建可預測且線程安全的應用程序至關重要,尤其是在處理並發操作時。

不可變記錄結構

不可變記錄結構的聲明類似於記錄類,但使用 record struct 語法。 它結合了記錄的不可變性和基於值的比較以及值類型的性能優勢:

public readonly record struct ImmutablePerson(string FirstName, string LastName);
public readonly record struct ImmutablePerson(string FirstName, string LastName);
'INSTANT VB TODO TASK: C# 'records' are not converted by Instant VB:
'public readonly record struct ImmutablePerson(string FirstName, string LastName)
$vbLabelText   $csharpLabel

使用記錄

記錄簡化了面向數據類型的創建和使用。它們支持繼承,允許非破壞性變更,並提供內置格式以便於除錯。 讓我們通過示例探索這些功能。

創建和比較記錄

考慮以下示例,我們創建了兩個人員記錄實例:

var person1 = new Person("Iron", "Software");
var person2 = new Person("Iron", "Software");
Console.WriteLine(person1 == person2); // Output: True
var person1 = new Person("Iron", "Software");
var person2 = new Person("Iron", "Software");
Console.WriteLine(person1 == person2); // Output: True
Dim person1 = New Person("Iron", "Software")
Dim person2 = New Person("Iron", "Software")
Console.WriteLine(person1 = person2) ' Output: True
$vbLabelText   $csharpLabel

儘管 person1person2 是兩個不同的實例,但根據其屬性值它們被認為是相等的,展示了基於值的相等性。 這顯著與引用類型的默認行為不同,後者專注於引用相等性。

不可變屬性

根據設計,記錄屬性是不可變的。 這意味著在創建記錄實例後,無法更改其屬性值。

// This will result in a compilation error
// person1.FirstName = "Jane";
// This will result in a compilation error
// person1.FirstName = "Jane";
' This will result in a compilation error
' person1.FirstName = "Jane";
$vbLabelText   $csharpLabel

記錄繼承

記錄支持繼承,允許您創建數據模型層次結構。 以下是擴展基礎記錄的方法:

public record Employee(string FirstName, string LastName, string Department) : Person(FirstName, LastName);
public record Employee(string FirstName, string LastName, string Department) : Person(FirstName, LastName);
'INSTANT VB TODO TASK: C# 'records' are not converted by Instant VB:
'public record Employee(string FirstName, string LastName, string Department) : Person(FirstName, LastName)
$vbLabelText   $csharpLabel

Employee 記錄擴展了 Person,添加了額外的 Department 屬性。

高級記錄功能

非破壞性變更

記錄提供了一種內置方法,用於從現有記錄實例創建新記錄實例並修改某些屬性,稱為非破壞性變更。

var updatedPerson = person1 with { FirstName = "Jane" };
var updatedPerson = person1 with { FirstName = "Jane" };
'INSTANT VB TODO TASK: C# 'with expressions' are not converted by Instant VB:
'var updatedPerson = person1 with { FirstName = "Jane" }
$vbLabelText   $csharpLabel

內置格式

記錄具有內置格式以便於調試和日誌記錄,能夠自動提供其屬性的字符串表示。

Console.WriteLine(person1);
Console.WriteLine(person1);
Console.WriteLine(person1)
$vbLabelText   $csharpLabel

使用 C# 記錄的優勢

  • 簡化的語法:記錄減少了樣板代碼的需求,使您的模型更簡潔和可讀。
  • 不可變的數據模型:記錄的不可變性有助於創建線程安全的應用程序。
  • 基於值的相等性:記錄使用基於值的相等性,而不是引用相等性,非常適合面向數據的類型。
  • 支持繼承:記錄可以從其他記錄繼承,允許代碼重用和層次結構數據模型。

IronPDF 介紹:一個 C# PDF 庫

C# 記錄(對開發人員的工作原理):圖 1

IronPDF 概覽 是一個為 .NET 開發人員設計的 PDF 庫,用於生成、編輯和操作 C# 應用程序中的 PDF 文件。 IronPDF 支持從 HTML 內容、CSS、圖像和 JavaScript 渲染 PDFs

其核心能力在於從 Web 內容創建 PDF 文件,提供了一種流線型的方法將 HTML 字符串、URL 和 ASPX Web 表單轉換為 PDF 文件。 IronPDF 在各種應用程序類型(包括表單應用程序、服務器應用程序和 Web 應用程序)中運行高效。

如何安裝 IronPDF 庫

安裝 IronPDF 很簡單,可以通過 Visual Studio 中的 NuGet 包管理器實現。 按照以下步驟進行:

  1. 在 Visual Studio 中,導航至解決方案資源管理器,右鍵單擊引用,然後選擇管理 NuGet 包。
  2. 在 NuGet 包管理器中,選擇瀏覽,然後搜索"IronPdf"。
  3. 找到 IronPDF 包並點擊安裝。

C# 記錄(對開發人員的工作原理):圖 2

或者,您可以使用包管理器控制台使用以下命令安裝它:

Install-Package IronPdf

示例:將 C# 記錄與 IronPDF 結合使用

讓我們考慮一個實際示例,我們使用 C# 記錄來持有數據,然後使用 IronPDF 生成一個 PDF 文件:

public record Person(string FirstName, string LastName);

class Program
{
    static void Main(string[] args)
    {
        // Create an instance of the Person record.
        var person = new Person("Iron", "Developer");

        // Initialize a new renderer object for generating PDF files using Chrome's rendering engine.
        var renderer = new IronPdf.Rendering.ChromePdfRenderer();

        // Render an HTML string as a PDF document.
        var pdf = renderer.RenderHtmlAsPdf($"<h1>Person Record</h1><p>Name: {person.FirstName} {person.LastName}</p>");

        // Save the PDF to the specified location.
        pdf.SaveAs("PersonRecord.pdf");
    }
}
public record Person(string FirstName, string LastName);

class Program
{
    static void Main(string[] args)
    {
        // Create an instance of the Person record.
        var person = new Person("Iron", "Developer");

        // Initialize a new renderer object for generating PDF files using Chrome's rendering engine.
        var renderer = new IronPdf.Rendering.ChromePdfRenderer();

        // Render an HTML string as a PDF document.
        var pdf = renderer.RenderHtmlAsPdf($"<h1>Person Record</h1><p>Name: {person.FirstName} {person.LastName}</p>");

        // Save the PDF to the specified location.
        pdf.SaveAs("PersonRecord.pdf");
    }
}
'INSTANT VB TODO TASK: C# 'records' are not converted by Instant VB:
'public record Person(string FirstName, string LastName)

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		' Create an instance of the Person record.
		Dim person As New Person("Iron", "Developer")

		' Initialize a new renderer object for generating PDF files using Chrome's rendering engine.
		Dim renderer = New IronPdf.Rendering.ChromePdfRenderer()

		' Render an HTML string as a PDF document.
		Dim pdf = renderer.RenderHtmlAsPdf($"<h1>Person Record</h1><p>Name: {person.FirstName} {person.LastName}</p>")

		' Save the PDF to the specified location.
		pdf.SaveAs("PersonRecord.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

此示例創建了一個簡單的 Person 記錄,然後使用 IronPDF 生成一個顯示該人員姓名的 PDF 文件。 它展示了如何無縫地將 C# 記錄與 PDF 生成集成在 .NET 應用程序中。

C# 記錄(對開發人員的工作原理):圖 3

IronPDF授權

C# 記錄(對開發人員的工作原理):圖 4

IronPDF 是一款商業產品,提供適合不同需求的多種許可證,包括個人和商業選項。 每次購買均附帶終身許可證和 30 天退款保證。 在購買許可證之前,請先瀏覽 IronPDF 許可證選項

結論

C# 記錄在簡化 .NET 應用程序中的數據建模方面邁出了重要一步。 通過理解和利用記錄,開發人員可以創建更可靠、可維護和可讀的代碼庫。

無論您是開發大規模應用程序還是簡單的數據結構,記錄所提供的功能,從不可變性到基於值的相等性,使其成為您 C# 工具包中不可或缺的工具。

IronPDF 提供了一個機會,通過 IronPDF 免費試用版 測試其功能,然後決定是否購買。 如果發現軟件滿足您的需求,您可以從 $799 開始購買許可證。

常見問題解答

如何在 C# 中使用 record 生成 PDF?

C# record 可用於高效存儲數據,然後可利用 IronPDF 將這些數據生成為 PDF 文件。您可以創建一個 record 來保存所需數據,並使用 IronPDF 將此數據渲染成 PDF 格式。

使用 C# record 有什麼好處?

C# record 提供多種好處,包括簡化的語法、不可變的數據模型、基於值的相等性以及繼承支持。這些特性使 record 適合創建簡潔且可靠的數據集中類型。

record 如何在 C# 中處理相等性?

C# 中的 record 強調基於值的相等性。這意味著如果兩個 record 實例的屬性值匹配,則認為它們是相等的,與其內存中的位置無關。

如何在 C# 中聲明一個 record?

在 C# 中聲明一個 record 使用 record 關鍵字,後跟類型(類或結構)和 record 的名稱。例如:public record class Person(string FirstName, string LastName);

record 類和 record 結構有什麼區別?

record 類是引用類型,而 record 結構是值類型。兩者均提供不可變性和基於值的比較,但它們在內存分配和使用場景上有所不同。

創建後可以修改 C# record 的屬性嗎?

C# record 設計為不可變,這意味著屬性在 record 創建後不能更改。但是,您可以進行非破壞性的更改來創建具有修改過屬性的新 record 實例。

IronPDF 如何增強 C# 應用程式?

IronPDF 提供強大的功能來生成、編輯和操作 PDF 文件,從而增強 C# 應用程式。它允許開發人員從 HTML 內容創建 PDF,是管理文件的多功能工具。

如何在 .NET 專案中安裝 IronPDF?

您可以使用 Visual Studio 的 NuGet 套件管理器或在套件管理器控制台中運行命令 Install-Package IronPdf 在 .NET 項目中安裝 IronPDF。

在 C# record 中,非破壞性更改是如何運作的?

C# record 中的非破壞性更改允許您從現有 record 實例創建一個具有某些修改屬性的新實例,且不改變原始實例。

在 C# 開發中,PDF 庫有什麼用途?

在 C# 開發中,像 IronPDF 這樣的 PDF 庫用於生成、編輯和操作 PDF 文件。它幫助開發人員高效地將 PDF 功能集成到他們的應用程序中。

Curtis Chau
技術作家

Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。

除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。