.net 6.00 —— record 类型 (TODO)

https://www.zhihu.com/question/449756804

 

作者:醉书生
链接: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" };
 
posted @ 2022-01-10 16:13  PanPan003  阅读(349)  评论(0编辑  收藏  举报