不同的getter样式之间的差异?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (58)

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

public int Number { get; } = 0

public int Number => 0;

这两者之间有何区别?

提问于
用户回答回答于

用DateTime属性:

class SomeTestClass
{
    public DateTime Start { get; } = DateTime.Now;

    public DateTime Now => DateTime.Now;
}

Start属性保持返回相同时间(创建实例时),而Now变化,以反映当前时间。

用户回答回答于

第一个是在构造函数执行前有一个初始化为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评估,因此会得到不同的结果。

所属标签

可能回答问题的人

  • 天使的炫翼

    17 粉丝531 提问36 回答
  • 富有想象力的人

    3 粉丝0 提问30 回答
  • 学生

    3 粉丝476 提问28 回答
  • o o

    4 粉丝494 提问27 回答

扫码关注云+社区

领取腾讯云代金券