【问题标题】:Immutability with Recods vs. Classes with auto-implemented get-only propertiesRecod 的不变性与具有自动实现的 get-only 属性的类
【发布时间】:2021-11-17 10:52:41
【问题描述】:

在使用具有自动实现的 get-only 属性的类与 C# 9 记录时,不可变有什么不同吗?我想编译器会在后台支持字段(?)和魔法来支持语法糖,但是说下面的类型是数据传输对象,它们一旦反序列化就不可变了吗?除了更短的语法之外,记录与类相比是否有任何不变性增强?

例如

public class RgbColor 
{
    public RgbColor(int r, int g, int b) { /* do assign here ... */ }
    public int Red { get; }
    public int Green { get; }
    public int Blue { get; }
}

public record RgbColor (
   int Red,
   int Green,
   int Blue
);

【问题讨论】:

  • 属性没有神奇的深拷贝不变性,仅仅因为它们是记录的一部分,不。当然,如果你想这样做,一个好主意是让所有类型都涉及到记录。

标签: c# immutability record


【解决方案1】:

Docs:

您可以使用位置参数或标准属性语法创建具有不可变属性的记录类型:

public record Person(string FirstName, string LastName);

还有:

您还可以创建具有可变属性和字段的记录类型:

public record Person
{
    public string FirstName { get; set; } = default!;
    public string LastName { get; set; } = default!;
};

这和你的类一样可变。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-02
    • 2018-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-11
    • 1970-01-01
    相关资源
    最近更新 更多