C#中为何record class默认不可变,record struct默认可变?
C# Record Class与Record Struct默认可变性的疑问
我一直学到的知识是结构体几乎应该始终保持不可变,但record class和record struct的默认行为却与此相悖,这让我很困惑。
Record Class 示例
record class Person(string FirstName, string LastName); Person p = new("John", "Smith"); p.FirstName = "Jack"; // 不允许修改!
Record Struct 示例
record struct Person(string FirstName, string LastName); Person p = new("John", "Smith"); p.FirstName = "Jack"; // 可以正常修改!
Readonly Record Struct 示例
readonly record struct Person(string FirstName, string LastName); Person p = new("John", "Smith"); p.FirstName = "Jack"; // 现在不允许修改了!
疑问点
- 为什么非
readonly的record struct默认是可变的,而record class却默认不可变? - 我觉得当前的语法设计有点怪异,个人认为更合理的语法应该是这样的:
record class- 可变的引用类型,具备值语义。readonly record class- 不可变的引用类型,具备值语义。record struct- 可变的值类型,具备值语义。readonly record struct- 不可变的值类型,具备值语义。
内容的提问来源于stack exchange,提问作者Matthew Layton
相关产品推荐
相关产品推荐

