C#教程

关注公众号 jb51net

关闭
首页 > 软件编程 > C#教程 > C# Record关键字

C# Record关键字示例详解

作者:ou.cs

C#9.0引入record关键字,用于定义不可变且专注于数据表示的记录类型,记录类型自动生成构造函数、ToString、Equals和GetHashCode方法,并支持不可变性和可变性,适用于数据传输对象、不可变数据结构和配置对象等场景,本文介绍C# Record关键字,感兴趣的朋友一起看看吧

在 C# 9.0 中引入了 record 关键字,用于定义记录类型(Record Types)。记录类型是一种轻量级的数据载体,专注于表示数据,它提供了内置的相等性比较、生成属性和方法等功能,使得编写数据类更加简洁和高效。

基本概念

声明记录类型

记录类型的声明非常简洁,基本语法如下:

public record Person(string FirstName, string LastName, int Age);

这会生成一个包含 FirstNameLastNameAge 属性的记录类型,并自动提供构造函数、ToStringEqualsGetHashCode 方法。

不可变性和可变性

不可变记录:默认情况下,记录类型是不可变的,属性是只读的。例如:

public record Person(string FirstName, string LastName, int Age);

可变记录:可以通过在记录类型后添加 with 关键字来创建可变记录,允许修改属性。例如:

public record Person(string FirstName, string LastName, int Age) with;

构造函数和初始化

记录类型自动生成构造函数,可以直接通过属性初始化:

var person = new Person("John", "Doe", 30);

相等性比较

记录类型根据值进行相等比较:

var person1 = new Person("John", "Doe", 30);
var person2 = new Person("John", "Doe", 30);
Console.WriteLine(person1 == person2); // 输出: True

自定义方法和成员

可以在记录类型中添加自定义方法和成员:

public record Person(string FirstName, string LastName, int Age)
{
    public string FullName => $"{FirstName} {LastName}";
}

属性访问器

默认情况下,记录类型的属性是只读的。如果需要自定义属性行为,可以显式定义属性:

public record Person
{
    public string FirstName { get; init; }
    public string LastName { get; init; }
    public int Age { get; init; }
}

使用 init 访问器可以在初始化对象时设置值,但之后不能修改。

继承和派生

记录类型可以继承其他记录类型,派生记录类型会继承基记录类型的属性和方法。

public record Person(string FirstName, string LastName, int Age);
public record Employee(string FirstName, string LastName, int Age, string EmployeeId) : Person(FirstName, LastName, Age);

使用场景

示例代码

public record Person(string FirstName, string LastName, int Age)
{
    public string FullName => $"{FirstName} {LastName}";
}
class Program
{
    static void Main()
    {
        var person1 = new Person("John", "Doe", 30);
        var person2 = new Person("John", "Doe", 30);
        var person3 = new Person("Jane", "Doe", 25);
        Console.WriteLine(person1 == person2); // True
        Console.WriteLine(person1 == person3); // False
        Console.WriteLine(person1.FullName); // John Doe
    }
}

到此这篇关于C# Record关键字的文章就介绍到这了,更多相关C# Record关键字内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文