我可以定义一个类,如下所示:
public class MyClass
{
public int Id { get; }
public MyClass(int id) => Id = id;
}
Run Code Online (Sandbox Code Playgroud)
我必须Id从构造函数中定义 ,它将是只读的。
Init only setters但如果我想在 中使用C# 9.0,它是什么以及如何使用它?
public class MyClass
{
public int Id { get; init; }
}
Run Code Online (Sandbox Code Playgroud)
Maj*_*vin 11
Init only setter提供一致的语法来初始化对象的成员。属性初始值设定项清楚地表明哪个值正在设置哪个属性。缺点是这些属性必须是可设置的。
这样,您不需要在开头和构造函数中提供值,您可以在之后提供:
var myClass = new MyClass
{
Id = 10
}
Run Code Online (Sandbox Code Playgroud)
并且它将被密封,您无法再更改它。
myClass.Id = 43; // not allowed
Run Code Online (Sandbox Code Playgroud)
阅读更多信息
简而言之:
var obj = new MyClass
{
Id = 42 // totally fine
};
obj.Id = 43; // not OK, we're not initializing
Run Code Online (Sandbox Code Playgroud)
在这种情况下很简单,与使用构造函数参数没有太大区别,但在一些更复杂的场景中很有用,在这些场景中,您不需要 200 个构造函数参数,但您确实希望它在构造后表面上是不可变的。
| 归档时间: |
|
| 查看次数: |
5750 次 |
| 最近记录: |