我正在研究即将发布的C#9新特性。 它还引入了仅限初始化的属性。
现在的一个大的限制是属性必须是可变的,对象初始值设定器才能工作:它们的工作方式是首先调用对象的构造函数(在本例中是缺省的,无参数的构造函数),然后分配给属性设置器。
仅初始化属性修复了这个问题! 它们引入了一个init访问器,它是只能在对象初始化期间调用的set访问器的变体:
public class Person
{
public string FirstName { get; init; }
public string LastName { get; init; }
}
有了这个声明,上面的客户机代码仍然是合法的,但是任何后续对FirstName和LastName属性的赋值都是错误的。 这一行是什么意思? 如果ReadOnly也做同样的事情,那么Init-Only属性的用途是什么。
正如新的C#9特性文章所述,
现在的一个大的限制是属性必须是可变的,对象初始值设定器才能工作:它们的工作方式是首先调用对象的构造函数(在本例中是缺省的,无参数的构造函数),然后分配给属性设置器。
但是,如readonly文档中所述,带有readonly修饰符的值类型是不可变的。
因此,不能将只读属性与对象初始值设定项一起使用。
但是,对于仅限初始化的属性,您可以使用对象初始值设定项。