Record

简介: 【6月更文挑战第4天】

记录(Record)是C# 9.0引入的一种新的类型,它提供了一种创建不可变类型的简便方式,并且具有一些内置的行为,比如值相等性比较、非破坏性变化以及支持继承等特性。以下是关于.NET Core中记录(Record)的详细介绍:

什么是记录(Record)

记录是一个修饰符,用于定义一个引用类型,它提供了封装数据的内置功能,并且支持不可变的数据模型。在C# 10中,record可以与class一起使用来明确表示引用类型,也可以使用record struct来定义值类型[^4^]。

定义一个记录

使用record(或record class)可以定义引用类型,而record struct则用于定义值类型。记录的主构造函数参数称为位置参数,编译器会为这些参数生成公共属性。例如:

public record Person(string Name, string Address, int Age);

此外,记录也可以创建为可变类型,具有可变属性和字段:

public record Person
{
   
    public required string FirstName {
    get; set; }
    public required string LastName {
    get; set; }
};

记录类型提供的功能

  • 不可变性:记录默认是不可变的,这有助于创建线程安全的类型,并且可以保持哈希码不变。
  • 值相等性:记录类型重写了Equals方法和GetHashCode方法,以支持基于值的相等性比较。
  • 非破坏性变化:使用with表达式可以创建记录的副本并修改其属性,而不必改变原始对象。
  • 继承:记录支持继承,可以创建更具体的记录类型。
  • 内置格式化:记录类型重写了ToString方法,提供了一种内置的方式来格式化记录的字符串表示。

引用类型记录和值类型记录的区别

  • 使用recordrecord class声明的是引用类型,而record struct声明的是值类型。
  • recordreadonly record struct中,属性是不可变的(使用init访问器),而在record struct中,属性是可变的(使用getset访问器)。

Record常用属性

  • 位置语法:在创建记录实例时,可以使用位置参数来声明和初始化属性。
  • 不可变性positional recordpositional readonly record struct声明了init-only属性,而positional record struct声明了可读写属性。
  • 值相等性:记录类型自动实现了基于值的相等性比较。
  • 非破坏性变化:通过with表达式可以实现非破坏性变化。
  • 继承:记录支持继承,可以创建层次结构。
目录
相关文章
|
3月前
|
安全 编译器 C#
Record
【6月更文挑战第11天】
22 3
|
SQL 关系型数据库 MySQL
mysql查询出现QSqlQuery::value: not positioned on a valid record
mysql查询出现QSqlQuery::value: not positioned on a valid record
203 0
|
测试技术
pg_rewind实例--could not find previous WAL record at %X/%X
pg_rewind实例--could not find previous WAL record at %X/%X
97 0
|
存储 关系型数据库 MySQL
浅析InnoDB Record Header及page overflow(1)
浅析InnoDB Record Header及page overflow
105 0
浅析InnoDB Record Header及page overflow(1)
|
存储 NoSQL 关系型数据库
浅析InnoDB Record Header及page overflow(2)
浅析InnoDB Record Header及page overflow
114 0
|
存储 内存技术
Long Story of Block - segment
## segment segment 的概念实际来自 DMA controller,DMA controller 可以实现一段内存物理地址区间与一段设备物理地址区间之间的数据拷贝,segment 就描述 DMA 数据传输过程中的一段连续的内存空间,也就是说 DMA controller 可以将内存中一个 segment 中的数据拷贝到设备,或将设备中的数据拷贝到 segment 中 s
843 1
Long Story of Block - segment
0227show all segment level statistics
[20180227]show all segment level statistics.txt https://orainternals.wordpress.com/2013/06/12/dude-where-is-my-redo/ REM Author : Ri...
1006 1