C#9 终于添加了记录!我一直在等待这个,太棒了!但我想知道使用 { get; set; }
记录有什么意义?似乎记录应该是不可变的,并且对它们的所有属性都使用 { get; init; }
。也许我太习惯于使用不可变数据,但我不明白可变记录的意义。它似乎增加了代码中错误的可能性。我是否错过了一个非常明显且有用的用例?
最佳答案
首先:record
只是一个快速、简短的符号,用于声明一个类,其中包含一些自动免费添加的有用功能 - 但最终结果仍然是一个与其他类一样的类。它是语法糖,实际上有两种口味。
超短 位置语法 使所有属性 init-only
:
record Person(string FirstName, string LastName);
不太短的 名义语法 使开发人员负责为每个属性指定它:record Person
{
public string FirstName { get; set; }
public string LastName { get; init; }
}
提供这两种表示法的原因可能是没有一刀切。名义语法允许快速创建具有自定义 (im) 可变性的常规类,并且仍然免费获得复制构造函数、克隆、散列和比较/相等。
关于c# - C#9 中多条记录的用例是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67060547/