当前位置: 代码网 > it编程>编程语言>C# > C# Record关键字示例详解

C# Record关键字示例详解

2025年02月14日 C# 我要评论
在 c# 9.0 中引入了 record 关键字,用于定义记录类型(record types)。记录类型是一种轻量级的数据载体,专注于表示数据,它提供了内置的相等性比较、生成属性和方法等功能,使得编写

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

基本概念

  • 不可变性:记录类型默认是不可变的,这意味着它们的属性是只读的,不能被修改。
  • 相等性:记录类型根据其值进行相等比较,而不是引用比较。
  • 自动化成员:记录类型可以自动生成构造函数、属性、tostringequalsgethashcode 方法。

声明记录类型

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

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);

使用场景

  • 数据传输对象(dto):记录类型非常适合用来表示数据传输对象,因为它们专注于数据的表示和传输。
  • 不可变数据结构:在需要不可变数据的情况下,记录类型提供了方便的不可变性支持。
  • 配置对象:记录类型可以用来表示应用程序的配置选项,因为它们易于创建和比较。

示例代码

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关键字内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com