【发布时间】:2022-11-26 15:18:45
【问题描述】:
我被告知结构应该几乎总是不可变的,所以记录类与记录结构的这种不寻常行为让我措手不及。
使用记录类...
record class Person(string FirstName, string LastName);
Person p = new("John", "Smith");
p.FirstName = "Jack" // Not allowed!
使用记录结构...
record struct Person(string FirstName, string LastName);
Person p = new("John", "Smith");
p.FirstName = "Jack" // Fine!
使用只读记录结构...
readonly record struct Person(string FirstName, string LastName);
Person p = new("John", "Smith");
p.FirstName = "Jack" // Now allowed!
为什么是非readonly默认情况下记录结构是可变的,为什么相同的行为不适用于记录类?
编辑:我想我在这里问的是,为什么语法......很奇怪?
例如,它看起来更符合逻辑:
-
record class-可变的具有值语义的引用类型。 -
readonly record class-不变的具有值语义的引用类型。 -
record struct-可变的具有值语义的值类型。 -
readonly record struct-不变的具有值语义的值类型。
【问题讨论】: