gpt4 book ai didi

c# - init 在 c# 9 中是什么意思?

转载 作者:行者123 更新时间:2023-12-04 00:18:52 33 4
gpt4 key购买 nike

我在 C# 9 预览版中遇到了 C# 中的“ init ”关键字。它是什么意思,它的应用是什么?

public class Person
{
private readonly string firstName;
private readonly string lastName;

public string FirstName
{
get => firstName;
init => firstName = (value ?? throw new ArgumentNullException(nameof(FirstName)));
}
public string LastName
{
get => lastName;
init => lastName = (value ?? throw new ArgumentNullException(nameof(LastName)));
}
}

最佳答案

init 关键字创建所谓的仅初始化 setter 。他们将仅初始化属性和索引器的概念添加到 C#。这些属性和索引器可以在对象创建时设置,但只有在对象创建完成后才能有效获取。

引入的主要原因是避免样板代码。

像 Point 这样的简单不可变对象(immutable对象)需要:

struct Point
{
public int X { get; }
public int Y { get; }

public Point(int x, int y)
{
this.X = x;
this.Y = y;
}
}

init 访问器允许调用者在构造过程中改变成员,从而使不可变对象(immutable对象)更加灵活。这意味着对象的不可变属性可以参与对象初始值设定项,从而消除对类型中所有构造函数样板的需要。 Point 类型现在很简单:
struct Point
{
public int X { get; init; }
public int Y { get; init; }
}

然后消费者可以使用对象初始化器来创建对象
var p = new Point() { X = 42, Y = 13 };

您可以在此处阅读包含更多详细信息和解释的提案:

https://github.com/dotnet/csharplang/blob/c2df2ee72f4b36fca2e07c701a90a0dba8d1fc20/proposals/init.md

关于c# - init 在 c# 9 中是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62228994/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com