我正在经历C# 9 新特性 https://devblogs.microsoft.com/dotnet/welcome-to-c-9-0/即将发布。仅初始化 https://devblogs.microsoft.com/dotnet/welcome-to-c-9-0/#init-only-properties属性正在随之引入。
今天的一个大限制是,属性必须是可变的,对象初始值设定项才能工作:它们的功能是首先调用对象的构造函数(在本例中是默认的无参数构造函数),然后将其分配给属性设置器。
仅初始化属性可以解决这个问题!他们引入了一个 init 访问器,它是 set 访问器的变体,只能在对象初始化期间调用:
public class Person
{
public string FirstName { get; init; }
public string LastName { get; init; }
}
通过此声明,上面的客户端代码仍然合法,但对 FirstName 和 LastName 属性的任何后续分配都是错误的。这行是什么意思?如果 ReadOnly 也做同样的事情,那么 Init-Only 属性有什么用呢?
正如新 C# 9 中所述特色帖子, https://devblogs.microsoft.com/dotnet/welcome-to-c-9-0/
今天的一大限制是属性必须是可变的
为了使对象初始化器起作用:它们通过首先调用
对象的构造函数(在本例中是默认的无参数构造函数)和
然后分配给属性设置者。
但是,具有 readonly 修饰符的值类型是不可变的,如中所述只读文档 https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/readonly.
因此,不可能将只读属性与对象初始值设定项一起使用。
但是,对于仅 Init 属性,您可以使用对象初始值设定项。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)