【发布时间】:2020-06-14 12:19:14
【问题描述】:
我正在处理即将发布的C# 9 new features。正在引入Init-Only 属性。
今天的一大限制是属性必须是可变的,对象初始化器才能工作:它们通过首先调用对象的构造函数(在本例中为默认的无参数构造函数)然后分配给属性设置器来发挥作用。
仅初始化属性解决了这个问题!他们引入了一个 init 访问器,它是 set 访问器的一个变体,只能在对象初始化期间调用:
public class Person
{
public string FirstName { get; init; }
public string LastName { get; init; }
}
有了这个声明,上面的客户端代码仍然是合法的,但是任何后续对 FirstName 和 LastName 属性的赋值都是错误的。这行是什么意思?如果 ReadOnly 也做同样的事情,那么 Init-Only 属性的用途是什么。
【问题讨论】:
-
“即将发布” - 你从哪里得到这个想法?到目前为止,即使是实验性的,也没有实现或可用。他们说它主要只适用于 .NET 5.0 及更高版本,但这并不意味着它会在同一时间范围内发布。事实上,从逻辑上讲,他们可以在 2040 年发布它,“它需要 .east .NET 5.0”。据我所知,没有任何迹象表明我们何时可以使用这些特征,即使是在实验水平上也是如此。
-
@Supergibbs 完全没问题,这确实是一个很好的实用问题。但是有些人擅长拉别人的腿。