gpt4 book ai didi

c# - 不同 getter 样式之间的 C# 差异

转载 作者:IT王子 更新时间:2023-10-29 03:31:17 28 4
gpt4 key购买 nike

我有时会在 getter 的属性中看到缩写。例如。这两种类型:

public int Number { get; } = 0

public int Number => 0;

谁能告诉我这两者之间是否有任何区别。他们的行为如何?它们都是只读的吗?

最佳答案

是的,两者都是只读的,但还是有区别的。在第一个中,有一个在执行构造函数之前初始化为 0 的支持字段。您可以仅在构造函数中更改值,就像常规的只读字段一样。 getter 本身只是返回字段的值。

在第二个中,getter 每次只返回 0,不涉及任何字段。

因此,为了完全避免使用任何自动实现的属性或表达式体成员,我们有:

第一版

private readonly int _number = 0;
public int Number { get { return _number; } }

第二个版本

public int Number { get { return 0; } }

一个更清晰的差异示例如下所示:

public DateTime CreationTime { get; } = DateTime.UtcNow;
public DateTime CurrentTime => DateTime.UtcNow;

如果您创建单个对象,其 CreationTime 属性将始终给出相同的结果 - 因为它存储在一个只读字段中,在对象构造时初始化。但是,每次您访问 CurrentTime 属性时,都会导致计算 DateTime.UtcNow,因此您会得到可能不同的结果。

关于c# - 不同 getter 样式之间的 C# 差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46047721/

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