C# record(對於開發者的運行原理)
C# record 是一項強大的功能,引入了不變資料模型的建立,通過減少樣板程式碼來增強編碼體驗。 本教程旨在簡化C#中record的概念,為初學者提供其語法、使用方式和優勢的指導。
無論您是在處理資料傳輸物件、配置,或只是需要一種高效的方式來表示資料,C# records 提供了一種簡潔且對開發者友好的方法。 我們也會在本文後面討論 IronPDF。
什麼是C# Record?
C# 中的 record 是一種提供簡化語法來定義不變資料模型的參考型別。 與傳統的類定義不同,record 強調基於值的相等性,而非參考相等性。 這意味著如果兩個 record 實例的屬性值相同,它們就被視為相等,而不是僅僅因為它們引用了記憶體中的同一個物件位置。
Record種類:類與結構
在C#中有兩種主要的record型別:
- Record class: 預設的record型別,這是一種參考型別。
- Record struct: 為需要值型別的場景引入,這些結構預設是不變的,並提供類似於record類的基於值的比較。
Record宣告
宣告一個record很簡單。 您可以使用record關鍵字,後接型別(class或struct)和record的名稱來定義一個record。 比如,可以宣告一個簡單的人員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)
此宣告包含 FirstName 和 LastName 的位置參數,這些參數在底層生成公共屬性及其屬性的基本構造函式。
Records的不可變性質
Records旨在設計為不可變的,這意味著一旦建立一個record實例,其屬性值就不可更改。 這種不可變性對於建立可預測且執行緒安全的應用程式至關重要,特別是當涉及到並發操作時。
不可變的 Record Struct
不可變 record struct 宣告與 record class 類似,但使用 record struct 語法。 它結合了record的不可變性和基於值的比較,以及值型別的性能優勢:
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)
使用Records
Records簡化了以資料為中心的型別的建立和使用。它們支持繼承,允許非破壞性變更,並提供內建的格式化功能以便於除錯。 讓我們通過實例來探討這些特性。
建立和比較Records
考慮以下範例,我們建立了兩個人員record的實例:
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
雖然 person1 和 person2 是兩個不同的實例,但根據其屬性值它們被視為相等,展示了基於值的相等性。 這與參考型別的預設行為有顯著差異,後者側重於參考相等性。
不變屬性
從設計上講,record屬性是不可變的。 這意味著您不能在建立record實例後更改其屬性值。
// 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";
Records的繼承
Records支持繼承,允許您建立資料模型的階層結構。 這是您如何擴展基礎record的演示:
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)
此 Employee record 擴展了 Person,新增了額外的 Department 屬性。
進階Record特性
非破壞性變更
Records提供了一種內建的方法,從現有的record實例建立新的實例,修改某些屬性,稱為非破壞性變更。
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" }
內建格式化
Records具有內建的格式化功能,以便於除錯和日誌記錄,自動提供屬性的字串表示。
Console.WriteLine(person1);
Console.WriteLine(person1);
Console.WriteLine(person1)
使用C# Records的優勢
- 簡化語法:Records 減少了樣板程式碼的需求,讓您的模型更精簡和易讀。
- 不可變資料模型:Records 的不可變性質有助於建立執行緒安全的應用程式。
- 基於值的相等性:Records 使用基於值的相等性而不是參考相等性,這對於以資料為中心的型別是理想的。
- 支持繼承:Records 可以從其他records繼承,允許程式碼重用和階層資料模型。
IronPDF介紹:C# PDF程式庫

IronPDF 概述 是一個為 .NET 開發者設計的PDF程式庫,旨在在C#應用程式中生成、編輯和操縱PDF文件。 IronPDF 支援從HTML內容、CSS、圖像和JavaScript呈現PDF文件。
其核心能力在於從網頁內容建立PDF文件,提供了一種簡化的方式將HTML字串、URL和ASPX網頁表單轉換為PDF文件。 IronPDF高效地運行於各類應用程式,包括表單應用程式、伺服器應用程式和網頁應用程式。
如何安裝IronPDF程式庫
安裝IronPDF很簡單,可以通過Visual Studio中的NuGet包管理器來完成。 按照以下步驟:
- 在Visual Studio中,導航到解決方案管理器,右鍵點擊引用,選擇管理NuGet包。
- 在NuGet包管理器中,選擇瀏覽並搜索"IronPDF"。
- 找到IronPDF包並點擊安裝。

或者,您可以使用命令行管理器控制台,透過命令進行安裝:
Install-Package IronPdf
範例:使用C# Record 與 IronPDF
讓我們考慮一個實用的範例,我們使用C# record 來保存資料,然後使用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
此範例建立了一個簡單的 Person record,然後使用 IronPDF 生成展示該人姓名的PDF文件。 這展示了C# records 如何與 .NET 應用程式中的PDF生成無縫整合。

IronPDF 授權

IronPDF 是一種商業產品,提供不同需求的多種授權,包括個人和商業選項。 每次購買都附帶一個終身授權和30天退款保證。 探索 IronPDF 授權選項 在購買授權之前。
結論
C# records 代表著在簡化 .NET 應用程式中的資料建模方面向前邁進了一大步。 通過理解和利用records,開發者可以建立更可靠、易於維護和讀取的程式碼基。
無論您是在開發大型應用程式還是簡單的資料結構,records 所提供的不變性和基於值的相等性等特性,使其成為C#工具箱中不可或缺的工具。
IronPDF 提供了一個機會使用IronPDF 免費試用來測試其功能,在決定購買之前。 如果您發現此軟體符合您的需求,您可以從 $999 開始購買授權。
常見問題
如何在 C# 中使用記錄生成 PDF?
C# 記錄可以高效地儲存資料,然後由 IronPDF 用來生成 PDF 文件。您可以建立一個記錄來保存必要的資料,並使用 IronPDF 將這些資料渲染為 PDF 格式。
using C# 記錄有什麼好處?
C# 記錄具有多個優勢,包括簡化語法、不變資料模型、基於值的平等與支持繼承。這些特性使得記錄非常適合於建立簡潔且可靠的資料中心型別。
C# 中記錄如何處理平等?
C# 中的記錄強調基於值的平等。這意味著如果兩個記錄實例的屬性值相配,即使它們在記憶體中的位置不同,也被視為相等。
如何在 C# 中聲明記錄?
在 C# 中,記錄是使用 record 關鍵字聲明的,後面跟著型別(類或結構),以及記錄的名稱。例如,public record class Person(string FirstName, string LastName);。
記錄類和記錄結構之間有什麼區別?
記錄類是引用型別,而記錄結構是值型別。兩者都提供不變性和基於值的比較,但它們在記憶體分配和使用情況上有所不同。
建立後,您可以修改 C# 記錄的屬性嗎?
C# 記錄旨在保持不變性,這意味著建立後屬性不能改變。然而,您可以執行無破壞性的變動來建立具有修改過屬性的新記錄實例。
IronPDF 如何增強 C# 應用程式?
IronPDF 通過提供強大的功能來生成、編輯和操作 PDF 文件,從而增強 C# 應用程式。它允許開發者從 HTML 內容建立 PDF,這使其成為文件管理的多用途工具。
如何在 .NET 專案中安裝 IronPDF?
您可以使用 Visual Studio 中的 NuGet 套件管理器安裝 IronPDF,或在套件管理器控制台運行命令 Install-Package IronPdf。
非破壞性變動在 C# 記錄中如何運作?
在 C# 記錄中的非破壞性變動允許您從現有的實例建立具有某些屬性已修改的新記錄實例,而不改變原始實例。
在 C# 開發中 PDF 程式庫有什麼用途?
像 IronPDF 這樣的 PDF 程式庫用於 C# 開發中生成、編輯和處理 PDF 文件。它幫助開發者高效地將 PDF 功能整合到他們的應用程式中。




