.net 6.00 —— record 类型 (TODO)
https://www.zhihu.com/question/449756804
作者:醉书生
链接:https://www.zhihu.com/question/449756804/answer/2219422015
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
链接:https://www.zhihu.com/question/449756804/answer/2219422015
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
C# 9 引入了记录作为类的一种特殊的面向值的形式。在 C# 10 中,您还可以声明结构记录。C# 中的结构已经具有值相等性,但记录结构添加了一个==
运算符和一个 的实现,以及一个基于值的实现:IEquatable<T>ToString
public record struct Person
{
public string FirstName { get; init; }
public string LastName { get; init; }
}
就像记录类一样,记录结构可以是“位置”的,这意味着它们有一个主构造函数,它隐式声明了与参数对应的公共成员:
public record struct Person(string FirstName, string LastName);
但是,与记录类不同,隐式公共成员是可变的自动实现的属性。这是因为记录结构是元组的自然成长故事。例如,如果您有一个返回类型,并且您想将其扩展为命名类型,您可以轻松声明相应的位置结构记录并维护可变语义。(string
FirstName,
string
LastName)
如果您想要一个具有只读属性的不可变记录,您可以声明整个记录结构readonly
(就像其他结构一样):
public readonly record struct Person(string FirstName, string LastName);
C# 10 不仅支持with
记录结构的表达式,还支持所有结构以及匿名类型的表达式:
var updatedPerson = person with { FirstName = "Mary" };