C# 9 增加了 record
类型,这是一种使用基于值的相等性的新引用类型。
C# 10 引入了 record struct
语法,用于定义一个具有类似于 record
的属性的值类型 (https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/record)。
创建一个值类型版本的类型并不寻常,因为它原本是作为引用类型创建的,同时也具有基于值的相等性 - 这肯定会消除使用该类型的大部分好处。
为什么你会想要声明一个 record struct
呢?
我是否遗漏了其他东西?
record
所做的。它并没有引入新类型,而是引入了一种新的编写class
和struct
声明的方式,并自动生成样板文件。仅仅通过语法无法使现有的类或结构体表现出这种行为,那将会非常复杂 - 而改变元组的工作方式,虽然原则上可能,但已经过时了,因为大量现有的代码依赖于它们现有的行为。 - Jeroen Mostertrecord struct
。而且,record
现在与record class
是同一回事。这并不否定我所说的内容。当文档谈到record
作为“可以创建代替类或结构体的新引用类型”时,这些文档误导到了错误的地步;如果record
不是现有代码的普通旧类,那么它们将不会有一半的用处!基于值的相等性和不可变性可以手动实现在类上,但这很繁琐。record
消除了这种繁琐。 - Jeroen Mostert