IRONSOFTWAREHOME
开发者更新

C# init 关键字(开发者使用指南)

Jacob Mellor,Team Iron 的首席技术官
Jacob Mellor
Updated: 2026年4月21日

C# 9.0中的init关键字引入了一种定义类属性的新方法,用于创建不可变对象。 在较早版本的C#中,属性通常使用get和set访问器来读取和写入对象字段。 然而,使用init,你可以在对象初始化期间使可写属性仅可写,之后它们将变为只读。

本教程将通过实用示例和场景探索如何使用IronPDF库中的C# init关键字。 您还将了解传统属性设置器(set)与新init-only设置器之间的关键区别。

Init关键字的基本示例

让我们从一个基本示例开始:

public class Person
{
    public string FirstName { get; init; }
    public string LastName { get; init; }
}

var person = new Person
{
    FirstName = "Iron",
    LastName = "Dev"
};

// person.FirstName = "Jane";  // This will give a compile-time error.

C# Init关键字(开发人员如何使用):图1 - IDE因属性被标记为仅初始化而抛出错误

在此示例中,LastName被标记为仅初始化属性。 这意味着它们只能在对象初始化期间被赋值。 对象创建后,尝试更改这些值将导致编译时错误。

为什么使用Init关键字?

使用init关键字的主要原因是在初始化后使对象属性不可变。 传统上,您可以将属性标记为只读以实现不可变性。 然而,您通常需要一个接受所有必要值的构造函数来设置字段,这可能导致构造函数的样板代码。 使用init,您可以使用对象初始值设定项达到相同的目标,而无需编写冗长的构造函数。

public class Person
{
    public string FirstName { get; init; }
    public string LastName { get; init; }
    // Without using constructor boilerplate for property initialization
}

var person = new Person
{
    FirstName = "John",
    LastName = "Doe"
};

使用Init-Only属性进行对象初始化

使用init可顺利与对象初始值设定项配合使用。 您可以在创建对象时直接定义所需的属性,而无需依赖构造函数来设置值。

public class Point
{
    public int X { get; init; }
    public int Y { get; init; }
}

var point = new Point { X = 10, Y = 20 };

// point.X = 30;  // This will throw a compile-time error

这将创建一个简单且不可变的Point类型对象。 请注意,Y的值在初始化时设置,之后不能修改。

将init与构造函数混合使用

尽管init的主要用例是通过对象初始值设定项进行对象初始化,但如果需要,您仍然可以使用构造函数。 这在强制执行对象创建时的特定属性值时尤其有用。

public class Person
{
    public string FirstName { get; init; }
    public string LastName { get; init; }

    public Person(string firstName, string lastName)
    {
        FirstName = firstName;
        LastName = lastName;
    }
}

您可以同时使用构造函数和init属性。 这种方法在对象构建后仍然强制不可变性,同时提供了更多的灵活性。

Init相较于Private Set的优势

以前,开发人员使用私有set访问器以限制类外修改属性。

public class Person
{
    public string FirstName { get; private set; }
    public string LastName { get; private set; }

    public Person(string firstName, string lastName)
    {
        FirstName = firstName;
        LastName = lastName;
    }
}

尽管这种方法有效,但需要构造函数的样板代码来初始化属性。 此外,它允许类本身以后修改属性,这并不总是理想的不可变对象。 init关键字消除了这个问题,因为它仅允许在对象创建时进行初始化,并阻止之后的任何修改。

使用只读字段和Init访问器处理初始化

init关键字可以在对象创建期间初始化字段或属性,之后它们保持不可变。 虽然只读字段提供了不可变性,但init访问器为属性提供了类似的功能。 这是如何通过使用只读字段和init属性来处理不可变性的两种方式:

使用带构造函数的只读字段

在此示例中,我们对lastName使用只读字段,这些字段在对象构造期间设置。 这些字段只能在构造函数中分配一次,之后不能修改:

public class Person
{
    private readonly string firstName;
    private readonly string lastName;

    public string FirstName => firstName;
    public string LastName => lastName;

    public Person(string firstName, string lastName)
    {
        this.firstName = firstName;
        this.lastName = lastName;
    }
}

使用Init访问器进行初始化

或者,我们可以使用init访问器创建只能在对象创建期间初始化的只读属性,但之后不能更改。 这消除了只读字段的需要,并提供了一种更现代的语法:

public class Person
{
    public string FirstName { get; init; }
    public string LastName { get; init; }
}

IronPDF简介

C# Init关键字(开发人员如何使用):图2 - IronPDF:C# PDF库

IronPDF是一个为C#开发人员设计的强大PDF生成和操作库。 它通过将HTML、CSS、图像和其他内容转换为PDF文档来简化PDF操作。 IronPDF具有像素级完美渲染、跨平台支持和集成到.NET项目中的简单性,非常适合需要快速创建高质量PDF的开发人员。 您可以将其用于.NET Core、Framework和Standard,它支持包括Windows、Linux和macOS在内的广泛平台。

案例:使用IronPDF与C# Init关键字

为了在生成PDF的C#项目中创建不可变对象,您可以将init关键字与IronPDF结合使用。 init关键字确保对象在初始化后的完整性,而IronPDF基于该不可变模型处理数据并生成PDF。

请确保在您的项目中正确引用了IronPDF。 您可以通过NuGet安装它:

PM > Install-Package IronPdf

以下是代码示例:

using IronPdf;

public class Person
{
    public int Id { get; init; }
    public string FirstName { get; init; }
    public string LastName { get; init; }
}

public class PDFGenerator
{
    public static void CreatePersonPDF(Person person)
    {
        var htmlContent = $@"
        <html>
        <body>
            <h1>Person Information</h1>
            <p>ID: {person.Id}</p>
            <p>First Name: {person.FirstName}</p>
            <p>Last Name: {person.LastName}</p>
        </body>
        </html>";

        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        pdf.SaveAs($"Person_{person.Id}.pdf");
    }
}

class Program
{
    static void Main(string[] args)
    {
        var person = new Person
        {
            Id = 1,
            FirstName = "Iron",
            LastName = "Dev"
        };

        PDFGenerator.CreatePersonPDF(person);
    }
}

结论

总之,C#的init关键字允许您在提供对象初始化期间的灵活性的同时创建不可变对象。 它是私有set访问器的更清晰、更安全的替代方案,减少了构造函数样板代码的需求。 将init关键字与只读字段、结构体和验证逻辑结合使用,有助于构建稳健的、可靠的数据结构,同时保持不可变性而不牺牲可读性或灵活性。 IronPDF提供免费试用,许可证起价为**$999**。 这允许您访问其全部功能,包括编辑、压缩和保护PDF。

Jacob Mellor,Team Iron 的首席技术官
首席技术官

Jacob Mellor 是 Iron Software 的首席技术官,也是一位开创 C# PDF 技术的有远见的工程师。作为 Iron Software 核心代码库的原始开发者,他从公司成立之初就开始塑造公司的产品架构,与首席执行官 Cameron Rimington 一起将公司转变为一家拥有 50 多名员工的公司,为 NASA、特斯拉和全球政府机构提供服务。

相关文章

Key in blue circle

立即获取免费的 30 天试用版密钥。

Your trial license will be sent to your email address

无任何限制。100% 解锁。无需信用卡。

OR
bullet_checked无需信用卡或创建账户无任何限制。100% 解锁。无需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried Iron Suite
预约您的免费现场演示
Booking Badge

深受全球数百万工程师信赖

Iron Software 的客户徽标
获取您的无义务咨询
填写下面的表格或通过sales@ironsoftware.com
您的资料将始终保密。
深受全球数百万工程师信赖
Iron Software 的客户徽标
立即获取您的免费30 天试用密钥。
无需信用卡或创建账户
C# 用于 PDF 的 NuGet 库
通过 NuGet 安装

版本: 2026.9

PM > Install-Package IronPdf
nuget.org/packages/IronPdf/
  1. 在解决方案资源管理器中,右键点击引用,管理 NuGet 包
  2. 选择浏览并搜索 “IronPDF”
  3. 选择包并安装
C# PDF DLL
下载 DLL

版本: 2026.9

或在此处下载 Windows 安装程序。

  1. 下载并解压 IronPDF 到您的解决方案目录中的 ~/Libs 之类的位置
  2. 在 Visual Studio 解决方案资源管理器中,右键点击引用。选择浏览,“IronPDF.dll”

$999 起