跳至页脚内容
.NET 帮助

C# 记录(开发人员如何使用)

C# 记录 是一种强大的特性,旨在通过减少样板代码来简化不可变数据模型的创建和增强编码体验。 本教程旨在为初学者简化 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

雇员 记录扩展了 人员,添加了额外的 部门 属性。

高级记录功能

无损变更

记录提供了一种内置方法,用于从现有记录实例创建带有某些属性修改的新记录实例,称为无损变更。

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 渲染 PDF

其核心能力在于从网页内容创建 PDF 文档,提供了将 HTML 字符串、URL 和 ASPX 网页格式转换为 PDF 文件的简化方法。 IronPDF 在包括窗体应用程序、服务器应用程序和网络应用程序在内的各种应用类型中高效运行。

如何安装 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

此示例创建了一个简单的 人员 记录,然后使用 IronPDF 生成显示人名的 PDF 文档。 它展示了 C# 记录如何无缝地与 .NET 应用程序中的 PDF 生成集成。

C# 记录(如何为开发者工作):图 3

IronPDF许可

C# 记录(如何为开发者工作):图 4

IronPDF 是一款商业产品,提供多种根据不同需求量身定制的许可证,包括个人和商业选项。 每次购买都附带终身许可证和 30 天退款保证。 探索 IronPDF 许可证选项 在购买许可证之前。

结论

C# 记录在简化 .NET 应用程序中的数据建模方面代表了一大步。 通过理解和利用记录,开发人员可以创建更可靠、可维护和可读的代码库。

无论您是在开发大型应用程序还是简单的数据结构,记录提供的从不可变性到基于值的相等性的功能,都使其成为 C# 工具包中不可或缺的工具。

IronPDF 提供可以使用 IronPDF 免费试用 测试其功能,然后再决定购买。 如果您发现软件符合您的需求,您可以购买起始价为 $799 的许可证。

常见问题解答

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

C#记录可以有效存储数据,然后可以被IronPDF利用来生成PDF文档。您可以创建一个记录来保存必要的数据,并使用IronPDF将这些数据渲染为PDF格式。

使用C#记录有什么好处?

C#记录提供了几个好处,包括简化的语法、不可变的数据模型、基于值的相等性和对继承的支持。这些功能使记录适合创建简洁可靠的数据中心类型。

记录如何在C#中处理相等性?

C#中的记录强调基于值的相等性。这意味着如果两个记录实例的属性值相匹配,就会被视为相等,而不考虑它们在内存中的位置。

如何在C#中声明记录?

C#中的记录使用record关键字声明,后接类型(class或struct)和记录名称。例如,public record class Person(string FirstName, string LastName);

记录类和记录结构之间有什么区别?

记录类是引用类型,而记录结构是值类型。两者都提供不变性和基于值的比较,但它们在内存分配和使用场景中有所不同。

创建C#记录后可以修改属性吗?

C#记录设计为不可变,这意味着在记录创建后属性无法更改。但是,您可以执行非破坏性变更来创建具有修改属性的新记录实例。

IronPDF如何增强C#应用程序?

IronPDF通过提供强大的生成、编辑和操作PDF文档的功能来增强C#应用程序。它允许开发者从HTML内容创建PDF,使其成为文档管理的多功能工具。

如何在 .NET 项目中安装 IronPDF?

您可以使用Visual Studio中的NuGet包管理器或在包管理器控制台中运行Install-Package IronPdf命令,在.NET项目中安装IronPDF。

C#记录中的非破坏性变更如何工作?

C#记录中的非破坏性变更允许您从现有记录实例创建具有某些属性修改的新实例,而不改变原始实例。

在C#开发中PDF库用来做什么?

像IronPDF这样的PDF库在C#开发中用于生成、编辑和操作PDF文档。它帮助开发者有效地将PDF功能集成到他们的应用程序中。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。