【发布时间】:2020-09-17 09:15:54
【问题描述】:
记录是 c#9、Net 5 中的一个新特性
我是said
如果您希望整个对象是不可变的并且表现得像一个值,那么您应该考虑将其声明为记录
在 c#9 , NET 5 中创建记录:
public record Rectangle
{
public int Width { get; init; }
public int Height { get; init; }
}
然后实例化它:
var rectangle = new Rectangle (20,30);
试图改变值:
rectange.Width=50; //compiler error
编译器报错:
错误 CS8852:仅初始化属性或索引器“Rectangle.Width”只能在对象初始化器中分配,或在实例构造函数或“init”访问器中的“this”或“base”上分配。
这是正确的,并确保记录是不可变的。
使用方法like 测试IsImmutable 类型给出false,因为在记录中没有生成只读属性。
如何查看c# 9中的记录,Net 5在运行时是不可变的,甚至有init property?
【问题讨论】:
-
你应该可以做到
rectangle.Width.GetSetMethod() != null -
集合由roslyn编译器生成,用于记录。
-
那么我假设它是私有的,因为你的分配不起作用,所以你可以检查它是否是公开的:
rectangle.Width.GetSetMethod(true).isPublic -
Setter 是公开的,类似于:` public int Width { get { return
k__BackingField; } 设置 { k__BackingField = value; } } `
标签: immutability record .net-5 c#-9.0